我目前正在学习Python,我决定建立一个小小的"猜数字"游戏类型。我正在使用随机功能,并试图使其能够检测用户的输入是否等于随机数。这是我的代码:
irand = randrange(1, 10)
while True:
number = input ("Pick a number 1-10: ")
if number < irand:
print (" ")
print ("That's too high, try again.")
if number > irand:
print (" ")
print ("That's too low, try again.")
if number == irand:
print (" ")
print ("You got it right! You won!")
break
我不确定如何检测number
是否等于,小于或大于irand
。有帮助吗?谢谢! :)
答案 0 :(得分:6)
检查“等于,小于或大于”的代码是正确的,但您在代码中遇到之前的问题。
在Python(3.0及更高版本)中,input
返回一个字符串。因此,您要将number
(一个字符串)与irand
(一个数字)进行比较。有些语言可能会自动转换为一种方式,但这可能令人困惑,*,因此Python拒绝这样做,而是引发TypeError: unorderable types: int() < str()
。
解决方案是将输入解析为数字,如下所示:
number = int(number)
如果用户提供无效输入,则会引发ValueError
,如字母c
而不是1到10之间的数字。如果您想要更好地处理,请使用try
声明。
作为旁注,您可能需要elif
而不是if
。如果你把一切都搞定了,这没有任何区别,但如果你犯了一个错误,那就有助于发现错误。
所以,把它们放在一起:
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
(请注意,我在continue
子句中使用了except
,因此我们跳过循环的其余部分,不必担心number
不再是一个数字。我们还可以将整个循环移动到else
上的try
原因,或者对每个isinstance
等添加if
检查,但这有点笨拙。 )
*考虑将字符串"2"
与数字10
进行比较。将字符串转换为数字的语言将表示2 < 10
;将数字转换为字符串的语言将表示"10" < "2"
。没有一个是“正确”或“错误”,但两者都是一半的时间令人惊讶......
答案 1 :(得分:-1)
您可以使用以下代码:
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 > 10:
print(" ")
print("That's too high, try again.")
elif number < 1:
print(" ")
print("That's too low, try again.")
else:
print(" ")
print("You got it right! You won!")
break