Python的新手(2.7)。我正在尝试收集可以是int或字符串的用户输入(我假设这是可能的,尽管我不确定100%)。当我到达下面发布的语句时,我输入的任何数字都会显示“无效输入”消息,并提示我再次输入用户,即使它在我希望的范围之内。输入“ q”仍然可以正常工作,如果输入则返回。
我尝试将第一个@Embedded(prefix = “some_name”)
语句更改为if
...,也没有运气。
(0 <= collectEyesBlade <= 9)
答案 0 :(得分:1)
由于raw_input
返回str
,因此从使用另一个字符串的比较开始。然后,尝试将其转换为int
。最后,如果成功,请尝试整数比较。
while True:
collectEyesBlade = raw_input("\nEnter desired blade number: ")
if collectEyesBlade.lower() == 'q':
return
try:
collectEyesBlade = int(collectEyesBlade)
except ValueError:
print "\nInvalid input. Enter value between 0 and 9, or 'q' to quit"
continue
if collectEyesBlade in range(0,9):
break
答案 1 :(得分:0)
if collectEyesBlade in [str(x) for x in range(0,9)]
-这应该起作用,因为collectEyesBlade
是一个字符串,因此我们需要将其与字符串进行比较
答案 2 :(得分:0)
您遇到了两个Python的小怪癖。一个:范围本身就是一个可迭代的,但可以将一个可迭代的内容放在另一个可迭代的内部。
换句话说,您的声明
if collectEyesBlade in [range(0,9)]:
正在检查是否collectEyesBlade是列表中的一个项目,该列表只有一个项目:可迭代范围。由于您没有输入可迭代的范围,因此失败了。
您可以说
if collectEyesBlade in list(range(0,9)):
会将范围可迭代的内容转换为实际列表,或者只是
if collectEyesBlade in range(0,9):
任何人都应该做你想做的事。
但是,正如另一个回答者所提到的,这仅是问题的一半。如果您的输入实际上可能是整数类型,那么上面的内容就足够了,但是您需要一个字符串输入。仅仅因为输入为“ 1”并不意味着它不是字符串。
这里有两个选项。您可以进行尝试,除非将输入的字符串转换为整数,如果由于无法将字符串转换为整数而失败,请继续进行;或者您可以将要比较的数字范围/列表转换为字符串。