Your code to check "equal to, less than, or greater than" is correct, but you've got a problem earlier in the code.
In Python (3.0 and later), input
returns a string. So, you're comparing number
, a string, to irand
, a number. Some languages might convert one way or the other automatically, but that can be confusing,*, so Python refuses to do so, and instead raises a TypeError: unorderable types: int() < str()
.
The solution is to parse the input into a number, like this:
number = int(number)
This will raise a ValueError
if the user gives you invalid input, like the letter c
instead of a number from 1 to 10. If you want to deal with that more nicely, you use a try
statement.
As a side note, you probably want elif
instead of if
. If you've got everything right, this doesn't make any difference, but if you've made a mistake, it helps catch the mistake.
So, putting it all together:
while True:
number = input("Pick a number 1-10: ")
try:
number = int(number)
except ValueError:
print(number, 'is not a number, try again.')
continue
if number < irand:
print(" ")
print("That's too high, try again.")
elif number > irand:
print(" ")
print("That's too low, try again.")
else:
print(" ")
print("You got it right! You won!")
break
(Notice that I used continue
in the except
clause, so we skip over the rest of the loop and don't have to worry about number
not being a number anymore. We could also move the whole loop into an else
cause on the try
, or add an isinstance
check on each if
, etc., but that gets a bit clumsy.)
* Consider comparing the string "2"
to the number 10
. A language that converts the string to a number will say that 2 < 10
; a language that converts the number to a string will say that "10" < "2"
. Neither one is "right" or "wrong", but both are surprising half the time…