我只是在尝试使用Python,非常喜欢它!但是我一直坚持尝试/除了。
我有一个代码检查raw_input是否为整数,但是我想让它起作用,并且它不想成为它:)
这里的代码,我有这个:
number_of_iterations = raw_input("What is your favorite number?")
try:
int(number_of_iterations)
is_number = True
except:
is_number = False
while not is_number:
print "Please put a number!"
number_of_iterations = raw_input("What is your favorite number?")
try:
int(number_of_iterations)
is_number = True
except:
is_number = False
我不想在这里重复自己。所以我认为即将发挥作用:
def check_input(input_number):
try:
int(input_number)
return True
except:
return False
但是如果输入一个字符串就会出错,说int不能用于字符串。看起来它没有看到'尝试'关键词。 可以解释为什么会发生这种情况以及将来如何预防它?
答案 0 :(得分:2)
试试这个,它可以避免在不需要def
while True:
try:
number_of_iterations = int(raw_input("What is your favorite integer?"))
break
except ValueError:
print "Please put an integer!"
编辑:根据评论者的建议,我已将break
添加到块的try
部分,以消除else
(原始遗骸)作为参考下面)。此外,我将“数字”更改为“整数”,因为“3.14”在上述代码中无效。
这是我最初的建议。以上是较少的线(有些可能称之为清洁),但我更喜欢以下,因为对我来说意图更清晰。
while True:
try:
number_of_iterations = int(raw_input("What is your favorite integer?"))
except ValueError:
print "Please put an integer!"
else:
break
答案 1 :(得分:1)
如果你想把它当作一个功能,那就决定两件事:
你的用例是你需要某种类型的int,如果它因任何原因而被炸出,它被定义为不是数字。
让我们创建一个元组作为返回值,因此我们可以返回一些类型和一个布尔值“if if is a number”。
def check_input(number):
try:
return (int(number), True)
except ValueError:
return (-999999, False) # Care more about boolean here
然后我们可以在while
循环中使用该返回值。请注意,我明确将循环条件设置为False
,因此我们至少输入一次。
is_number = False
num = -999999 # Define out of scope of loop so it can be used
while not is_number:
print "Please put a number!"
num, is_number = check_input(raw_input("What is your favorite number?"))
行num, is_number
是tuple packing的结果。由于我们从方法返回一个元组,我们可以为该元组的结果设置两个不同的变量。