我正在观看CS50的python讲座。 David J Malan编写了一个程序来从用户那里得到一个正整数。在这里,他使用了一个名为get_int()的函数,该函数在CS50 python库中编写。 我想模仿他。
def main():
num = get_int("Enter an integer")
print(num)
def get_int(prompt):
i =(input(prompt))
try:
i = int(i)
if type(i) == int:
return i
except ValueError:
return "not an integer"
if __name__ == "__main__":
main()
我必须使用程序get_positive_int
中返回的值 from get_int import get_int
def main():
i = get_positive_int("Positive integer please")
print(i)
def get_positive_int(prompt):
while True:
n = get_int(prompt)
if(n>=1): # problem here if user enters anything else than int
break
return n
if __name__ == "__main__":
main()
因此,如何编写更好的get_int()以便我不会收到错误:
TypeError: '>=' not supported between instances of 'str' and 'int'
答案 0 :(得分:1)
您可以大大简化该代码。此外,None
通常用于表示缺失/失败的值,因此您应该返回该值而不是字符串"而不是整数"。以下是一种接近它的方法示例:
def get_int(s):
try:
return int(s)
except ValueError:
return None # Can also just use pass to signify an empty block
i = get_int(s)
if i is not None:
print('Successful')
答案 1 :(得分:0)
由于我想在这个特殊场景中想要在get_positive_int程序中使用get_int()方法的解决方案,我将try块添加到get_positive_int.python。 同样在get_int()中我添加了none而不是返回“not an integer”
def get_int(prompt):
i =(input(prompt))
try:
i = int(i)
if type(i) == int:
return i
except ValueError:
return None
def get_positive_int(prompt):
while True:
n = get_int(prompt)
try:
if(n>=1):
break
except:
print("not an integer")
return n
答案 2 :(得分:0)
我对Python的CS50库版本不熟悉,但是到目前为止,至少get_int()
的C版本没有不能用作答案:如果输入无效, get_int()
再次询问用户另一个输入 ,一遍又一遍,直到给出有效的输入为止。
因此,要真正模拟这种行为:
def get_int(prompt):
while True:
try:
return int(input(prompt))
except ValueError:
pass
无需将int(input())
分配给i
或其他任何内容。如果没有引发异常,则值 是有效的整数,可以立即返回。不需要i
,也不需要测试None
或while
中的任何条件。
我们需要做的就是查看它是否引发了ValueError
类型的异常,并且该类型仅 ,从而使其他异常冒泡到调用方。
如果我们发现该异常?只需pass
,循环就会重新开始并再次请求输入。