oie*_*tin -2 python variables python-3.x
我目前正在学习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
Run Code Online (Sandbox Code Playgroud)
我不确定如何检测是否number等于,小于或大于irand.有帮助吗?谢谢!:)
你的代码来检查"等于,小于或大于"是正确的,但你有一个问题,前面的代码.
在Python(3.0及更高版本)中,input返回一个字符串.所以,你要比较number一个字符串irand,一个数字.有些语言可能会自动转换为一种方式,但这可能会令人困惑,*,所以Python拒绝这样做,而是提出了一种语言TypeError: unorderable types: int() < str().
解决方案是将输入解析为数字,如下所示:
number = int(number)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
(注意我continue在except子句中使用过,所以我们跳过循环的其余部分而不必担心number不再是一个数字了.我们也可以把整个循环移到一个else原因上try,或者添加一个isinstance检查每个if等等,但这有点笨拙.)
*考虑将字符串"2"与数字进行比较10.将字符串转换为数字的语言将说明2 < 10; 将数字转换为字符串的语言会说明"10" < "2".两者都没有"正确"或"错误",但两者都有一半的时间令人惊讶......