Code is:
import random
Cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
user = int(input("Number\n"))
print(Cards[user])
computer = int(input("Number\n"))
print(Cards[computer])
if Cards[user] > Cards[computer]:
print(f"You win {user} {computer}")
else:
print(f"You Lose {computer} {user}")
Output is:
Number
11
K
Number
12
A
You win 11 12
Its meant to say "You Lose" Since K as in king of cards is lower than an A which stands for Ace. What am I doing wrong here?
CodePudding user response:
This behavior occurs because you are comparing strings, rather than ints.
>>> "K" > "A"
True
As the "cards" are arranged in ascending order, you only need to check if user
is greater than computer
. This will compare ints and work the way you expect.
As an aside, you should be verifying that the index you get from the user is a valid one for the length of the list. There are many ways to do this.
CodePudding user response:
As @Samwise already commented:
How would Python know (without you telling it somehow) that "K" is a king and "A" is an ace and that ace > king? What would you expect it to say if you asked it to compare, say, "X" and "Y"?
Use the index of the elements instead:
import random
cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
user = input("Number\n") # int() doesn't work in all cases
computer = input("Number\n")
if cards.index(user) > cards.index(computer):
print(f"You win {user} {computer}")
else:
print(f"You Lose {computer} {user}")
CodePudding user response:
Maybe you should compare the index which orders the cards by value
import random
Cards = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
user = int(input("Number\n"))
print(Cards[user])
computer = int(input("Number\n"))
print(Cards[computer])
if user > computer: # Changed here
print(f"You win {user} {computer}")
else:
print(f"You Lose {computer} {user}")
CodePudding user response:
As stated by @maggle, the way to do it is to just compare the integers user and computer.
Comparing the indexes (as stated by @puncher) does not work, as Cards.index("11")
will return ValueError
(as the integer 11 is not in the list cards).