为什么这个程序不止一次地打印消息?
Why does this program print the message more than once?
我是编程新手,我编写了一个简单的程序来确定用户输入的数字是偶数还是奇数。我还做了一个函数来检查输入的数字是否是整数而不是浮点数。
如果用户键入一个数字,该程序大部分都能正确执行,但如果用户首先输入多个浮点数,则该数字是奇数还是偶数的消息会打印多次。为什么会这样?
def check_int(x,y):
if x != int(x):
print "The number is not an integer"
y()
else:
print "The number is an integer"
def even_odd():
given_number = input("Please type an integer: ")
check_int(given_number, even_odd)
if (given_number % 2) != 0:
print "The number is odd"
elif (given_number % 2) == 0:
print "The number is even"
even_odd()
问题是您使用了神秘版本的递归来循环您的程序。当你收到一个浮点数时,你调用check_int,打印消息,然后递归到输入函数。这会使您在堆栈上的第一个调用挂起 return。当你最后得到一个整数时,你正常离开check_int,但是随后return变为even_odd,它仍在等待处理浮点数的奇偶校验。这就是产生额外输出行的原因。
当您拒绝某些内容作为 non-integer 时,您需要循环回到输入,否则避免稍后检查奇偶校验。
def check_int(x,y):
return x != int(x)
def even_odd():
given_number = input("Please type an integer: ")
if check_int(given_number, even_odd):
print "The number is not an integer"
else:
print "The number is an integer"
# Check parity
if (given_number % 2) != 0:
print "The number is odd"
elif (given_number % 2) == 0:
print "The number is even"
even_odd()
如果您想循环直到得到一个整数,请将其写成一个单独的外部循环。
even_odd
再次从 check_int
中调用(在名称 y
下)。这就是为什么你会多次看到它的输出。
我想您认为这是在 check_int
完成后继续 even_odd
所必需的。这是没有必要的。当一个函数完成时,程序会自动从调用该函数的地方继续。
只需从 check_int
中删除 y
参数,删除行 y()
并将 check_int(given_number, even_odd)
更改为 check_int(given_number)
。
您的代码存在一些问题。
首先,您不需要 elif。如果 given_number % 2 !=0
为假,则相反的条件将始终为真。所以 != 0
的反义词是 0
.
另外,不要将函数作为回调传递。您编写它的方式可能会使您的程序崩溃。我建议你阅读更多关于 loops.
的内容
干杯!
我是编程新手,我编写了一个简单的程序来确定用户输入的数字是偶数还是奇数。我还做了一个函数来检查输入的数字是否是整数而不是浮点数。
如果用户键入一个数字,该程序大部分都能正确执行,但如果用户首先输入多个浮点数,则该数字是奇数还是偶数的消息会打印多次。为什么会这样?
def check_int(x,y):
if x != int(x):
print "The number is not an integer"
y()
else:
print "The number is an integer"
def even_odd():
given_number = input("Please type an integer: ")
check_int(given_number, even_odd)
if (given_number % 2) != 0:
print "The number is odd"
elif (given_number % 2) == 0:
print "The number is even"
even_odd()
问题是您使用了神秘版本的递归来循环您的程序。当你收到一个浮点数时,你调用check_int,打印消息,然后递归到输入函数。这会使您在堆栈上的第一个调用挂起 return。当你最后得到一个整数时,你正常离开check_int,但是随后return变为even_odd,它仍在等待处理浮点数的奇偶校验。这就是产生额外输出行的原因。
当您拒绝某些内容作为 non-integer 时,您需要循环回到输入,否则避免稍后检查奇偶校验。
def check_int(x,y):
return x != int(x)
def even_odd():
given_number = input("Please type an integer: ")
if check_int(given_number, even_odd):
print "The number is not an integer"
else:
print "The number is an integer"
# Check parity
if (given_number % 2) != 0:
print "The number is odd"
elif (given_number % 2) == 0:
print "The number is even"
even_odd()
如果您想循环直到得到一个整数,请将其写成一个单独的外部循环。
even_odd
再次从 check_int
中调用(在名称 y
下)。这就是为什么你会多次看到它的输出。
我想您认为这是在 check_int
完成后继续 even_odd
所必需的。这是没有必要的。当一个函数完成时,程序会自动从调用该函数的地方继续。
只需从 check_int
中删除 y
参数,删除行 y()
并将 check_int(given_number, even_odd)
更改为 check_int(given_number)
。
您的代码存在一些问题。
首先,您不需要 elif。如果 given_number % 2 !=0
为假,则相反的条件将始终为真。所以 != 0
的反义词是 0
.
另外,不要将函数作为回调传递。您编写它的方式可能会使您的程序崩溃。我建议你阅读更多关于 loops.
的内容干杯!