Python 仅从用户获取整数
我正在看CS50的python讲座。David J Malan编写了一个程序,从用户那里获取一个正整数。在这里,他使用CS50 python库中编写的一个名为get_int()的函数。 我正在努力模仿他Python 仅从用户获取整数,python,python-3.x,Python,Python 3.x,我正在看CS50的python讲座。David J Malan编写了一个程序,从用户那里获取一个正整数。在这里,他使用CS50 python库中编写的一个名为get_int()的函数。 我正在努力模仿他 def main(): num = get_int("Enter an integer") print(num) def get_int(prompt): i =(input(prompt)) try: i = int(i) i
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()
我必须使用程序中返回的值获取正整数
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'
您可以大大简化该代码。另外,
None
通常用于表示缺少/失败的值,因此您应该返回该值,而不是字符串“nota integer”。下面是一个实现方法的示例:
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')
由于我希望在这个特定场景中使用get_positive_int程序中的get_int()方法,因此我添加了try块来get_positive_int.python。 同样在get_int()中,我添加了none,而不是返回“nota integer” get_int.python 获取_正数_int.python
我不熟悉Python版本的CS50库,但至少C版本的
get_int()
到目前为止还没有找到答案:在输入无效的情况下,get_int()
重新向用户询问另一个输入,反复循环,直到给出有效的输入
因此,要真正模仿这种行为:
def get_int(提示):
尽管如此:
尝试:
返回int(输入(提示))
除值错误外:
通过
无需将int(input())
赋值给i
或任何对象。如果它没有引发异常,那么值是一个有效的整数,可以立即返回。不需要存在i
,也不需要对None
或中的任何条件进行测试
我们所需要做的就是查看它是否引发了ValueError
类型的异常,并且仅限于该类型,让其他异常冒泡到调用方
如果我们抓住了这个例外?只需pass
,循环将重新开始并再次请求输入。与其返回字符串“not a integer”,不如返回None(或不返回任何暗示返回None的内容),以表示某些代码失败。请说明原因,以便我从错误中吸取教训。我是python编程新手如果你用returnnone
而不是pass
,你就不需要解释性的注释了。我同意,但是使用pass感觉更好,而不是不必要地将returnnone指定为方法中的最后一行。虽然那只是我太挑剔了。无论哪种方法,使用pass隐式返回None,而不是实际使用返回None
都是非常可怕的。我甚至认为让ValueError从函数中传播出去更好。我不认为这一讨论的范围对任何“非常可怕”的事情都没有任何意义,但如果人们对此有如此强烈的意见,我只会更新答案我同意@TomDalton:检查返回值是非常愚蠢的。要么某个操作正常,您的值已返回,要么发生了其他操作,引发了异常。要么处理异常(例如,重新提示问题),要么让它冒泡。但是不要隐藏异常并用无效的返回值替换它。函数值不应为状态或错误条件!这个get_int
(从文件名开始,.python
?)有一些问题。使用int(i)
后,无需检查i
的类型-它将是int
,否则将引发异常。如果
失败,是不可能的(如果失败了,你会返回什么?)而且,在Python中,我们很少需要检查类型。在少数情况下(这里没有),它没有使用type
,最好使用isinstance(obj,type)
,就像你的例子中的如果isinstance(i,int)
。
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