Python(2.7)新手。我试图收集一个可以是int或string的用户输入(我假设这是可能的,尽管我不是100%确定)。当我看到下面发布的语句时,我输入的任何数字都会打印“Invalid input”消息,并再次提示我输入用户输入,即使它在我希望的范围内。输入“q”仍能正常工作,如果输入则返回。你知道吗
我试着把第一个if
语句改成(0 <= collectEyesBlade <= 9)
。。。也不走运。你知道吗
while True:
collectEyesBlade = raw_input(
"\nEnter desired blade number: ")
if collectEyesBlade in [range(0,9)]:
break
elif collectEyesBlade.lower() == 'q':
return
else:
print "\nInvalid input. Enter value between 0 and 9, or 'q' to quit"
continue
if collectEyesBlade in [str(x) for x in range(0,9)]
-这应该是可行的,因为collectEyesBlade
是一个字符串,所以我们需要将它与字符串进行比较你发现了Python的两个小怪癖。第一:一个范围本身就是一个iterable,但是可以把一个iterable放在另一个iterable里面。你知道吗
换句话说,你的陈述
正在检查collectEyesBlade是否是列表中的一个项,该列表只有一个项:range iterable。既然你没有进入一个范围,它就失败了。你知道吗
你可以说
这将把范围iterable变成一个实际的列表,或者
两个都应该做你想做的。你知道吗
然而,正如另一位回答者所提到的,这只是问题的一半。如果您的输入实际上可能是整数类型,那么上面的内容就足够了,但您要求的是字符串输入。输入是“1”并不意味着它不是字符串。你知道吗
这里有几个选择。您可以尝试将字符串输入转换为整数,如果由于无法将字符串转换为整数而失败,请继续;或者可以将要比较的数字范围/列表转换为字符串。你知道吗
因为
raw_input
返回一个str
,所以从使用另一个字符串的比较开始。然后,尝试将其转换为int
。最后,如果成功,请尝试整数比较。你知道吗相关问题 更多 >
编程相关推荐