我正在尝试做一个函数,要求3-8之间的整数,并将继续询问,直到用户输入一个3-8之间的整数。因此,如果您输入0、-1、9或"rabbits“,它将再次询问。
到目前为止,我有这样的想法:
def GetNumberOfColours():
NumberOfColours = None
while type(NumberOfColours) != int or int(NumberOfColours) < 3 or int(NumberOfColours) > 8:
print "Please enter the amount of colours you would like to play with (min 3, max 8)."
NumberOfColours = raw_input()
NumberOfColours = int(NumberOfColours)
但这段代码目前不能工作,因为它接受原始输入,如果是整数,也不会将其视为整数。但是,如果我使用input(),那么它将不会接受可以输入的字符串,并停止代码。我怎么才能让它工作呢?
发布于 2013-11-07 20:22:41
type(NumberOfColours)
将始终为str
(或在第一次运行时为NoneType
),因为raw_input()
返回一个字符串。
你应该这样做:
def get_number_of_colours():
while True:
print "Please enter the amount of colours you would like to play with (min 3, max 8):",
try:
num_colours = int(raw_input())
except ValueError: # gets thrown on any input except an integer value
continue
if 3 <= num_colours <= 8:
return num_colours
发布于 2013-11-07 20:22:46
您需要缩进最后一行,让脚本重复地将输入转换为整数。
然后您会发现,由于int()
不能将其转换为数字,因此输入"rabbits“将生成一个ValueError
。这可以使用try/except
来处理
def GetNumberOfColours():
NumberOfColours = None
while type(NumberOfColours) != int or int(NumberOfColours) < 3 or int(NumberOfColours) > 8:
print "Please enter the amount of colours you would like to play with (min 3, max 8)."
NumberOfColours = raw_input()
try:
NumberOfColours = int(NumberOfColours)
except ValueError:
NumberOfColours = None
发布于 2013-11-07 20:24:40
在您的while行中使用以下代码:
while !NumberOfColors.isDigit() or int(NumberOfColours) < 3 or int(NumberOfColours) > 8:
https://stackoverflow.com/questions/19835723
复制相似问题