Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 若首先输入了错误的数据,程序会两次询问数字_Python - Fatal编程技术网

Python 若首先输入了错误的数据,程序会两次询问数字

Python 若首先输入了错误的数据,程序会两次询问数字,python,Python,我对Python非常陌生(2天前开始)。我试图验证正整数。该代码确实验证了数字,但在输入错误的输入后,它会询问两次。例如,如果我输入单词Python,它会说:这不是一个整数!应该是这样的,但如果我在之后输入20,它也会说它不是整数,如果我再次输入20,它会读取它 def is_positive_integer(input): #error: when a non-integer is input and then an integer is input it takes two trie

我对Python非常陌生(2天前开始)。我试图验证正整数。该代码确实验证了数字,但在输入错误的输入后,它会询问两次。例如,如果我输入单词Python,它会说:这不是一个整数!应该是这样的,但如果我在之后输入20,它也会说它不是整数,如果我再次输入20,它会读取它

def is_positive_integer(input):
    #error: when a non-integer is input and then an integer is input it takes two tries to read the integer
    flag = 0
    while flag != 1:
        try:
            input = int(input)
            if input <= 0:
                print "This is not a positive integer!"
                input = raw_input("Enter the number again:")

        except ValueError:
            print "This is not an integer!" 
            input = raw_input("Enter the number again: ")             

        if isinstance(input, int):
            flag = 1
            return input

number = raw_input("Enter the number to be expanded: ")
is_positive_integer(number)
number = int(is_positive_integer(number))
def为正整数(输入):
#错误:当输入一个非整数,然后输入一个整数时,需要两次尝试读取该整数
标志=0
一面旗帜!=1:
尝试:
输入=int(输入)

如果输入则问题源于这样一个事实:您调用的
是两次正整数。因此,第一次调用它时,您向它发送一个字符串,如
'hello'
,然后它说它不是整数,并告诉您再试一次。然后输入解析良好的
'20'
,然后返回

但是你没有保存对它的引用,所以它没有任何用处


然后再次调用该函数,这次保存对它的引用,它首先尝试原始的坏字符串,该字符串仍然存在于
number
中。然后它抱怨输入错误,要求您输入一个新的输入,然后您提供它,终止程序。

问题源于您两次调用
都是正整数。因此,第一次调用它时,您向它发送一个字符串,如
'hello'
,然后它说它不是整数,并告诉您再试一次。然后输入解析良好的
'20'
,然后返回

但是你没有保存对它的引用,所以它没有任何用处


然后再次调用该函数,这次保存对它的引用,它首先尝试原始的坏字符串,该字符串仍然存在于
number
中。然后它抱怨输入错误,要求您输入一个新的输入,然后您提供它,终止程序。

主要错误是您使用相同的输入(输入的第一件事)调用了两次
is\u positive\u integer(number)

第一次调用
时为正整数(number)
,您会丢弃返回值。仅在第二次将结果分配给
number

您可以通过删除仅带有
正整数(数字)
的行来“修复”程序

但是,您的代码有点凌乱,而且名称
是_正_整数
并没有描述函数的实际功能

我会像这样重构:

def input_positive_integer(prompt):
    input = raw_input(prompt)
    while True:
        try:
            input = int(input)
            if input <= 0:
                print "This is not a positive integer!"
            else:
                return input
        except ValueError:
            print "This is not an integer!"

        input = raw_input("Enter the number again: ")

number = input_positive_integer("Enter the number to be expanded: ")
def输入\正\整数(提示):
输入=原始输入(提示)
尽管如此:
尝试:
输入=int(输入)

如果输入则主要错误是,您使用相同的输入(第一次输入)调用了两次
is\u positive\u integer(number)

第一次调用
时为正整数(number)
,您会丢弃返回值。仅在第二次将结果分配给
number

您可以通过删除仅带有
正整数(数字)
的行来“修复”程序

但是,您的代码有点凌乱,而且名称
是_正_整数
并没有描述函数的实际功能

我会像这样重构:

def input_positive_integer(prompt):
    input = raw_input(prompt)
    while True:
        try:
            input = int(input)
            if input <= 0:
                print "This is not a positive integer!"
            else:
                return input
        except ValueError:
            print "This is not an integer!"

        input = raw_input("Enter the number again: ")

number = input_positive_integer("Enter the number to be expanded: ")
def输入\正\整数(提示):
输入=原始输入(提示)
尽管如此:
尝试:
输入=int(输入)

如果输入非常感谢您的帮助。但是我不懂你的代码。while循环条件是如何变为false的?它永远不会变为false,但循环会随着
返回输入
行退出。
return
语句在其返回的函数中自动断开循环。这就是为什么原始代码实际上不需要行
flag=1
,因为您在执行该操作后立即返回。我不知道,这就是我使用标志的原因。这是我唯一想到的事情。再次感谢。非常感谢你的帮助。但是我不懂你的代码。while循环条件是如何变为false的?它永远不会变为false,但循环会随着
返回输入
行退出。
return
语句在其返回的函数中自动断开循环。这就是为什么原始代码实际上不需要行
flag=1
,因为您在执行该操作后立即返回。我不知道,这就是我使用标志的原因。这是我唯一想到的事情。再次感谢。