从用户获取整数

时间:2018-05-14 12:52:30

标签: python python-3.x

我正在观看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'

3 个答案:

答案 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”

get_int.python

def get_int(prompt):
    i =(input(prompt))
    try:
        i = int(i)
        if type(i) == int:                       
            return i
    except ValueError:
        return None

get_positive_int.python

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,也不需要测试Nonewhile中的任何条件。

我们需要做的就是查看它是否引发了ValueError类型的异常,并且该类型仅 ,从而使其他异常冒泡到调用方。

如果我们发现该异常?只需pass,循环就会重新开始并再次请求输入。