Python: 循环哨兵值
我需要写一个程序,这个程序要有一个循环,让用户输入一系列整数,最后输入-99来表示输入结束。在所有数字输入完后,程序应该显示输入的最大值和最小值。
这是我目前写的代码:
def main():
user_input = 1
while user_input != -99:
user_input = int(input("Enter your number or -99 to end."))
bigger = largest(user_input)
tinier = smallest(user_input)
print('The largest number is ', bigger, "and the smallest is ", tinier, ".")
def largest(number):
largest = 0
if number > largest:
largest = number
return largest
def smallest(number):
smallest = 10000
if number < smallest:
smallest = number
return smallest
main()
但不知为什么,结束标志(-99)也进入了循环,我完全搞不懂是怎么回事,而且它还成了最小值。更糟的是,最大值也总是错误的。非常感谢大家的帮助!
4 个回答
0
在Python中,缩进非常重要,所以你最小值和最大值函数的返回语句缩进不正确。
def largest(number):
largest = 0
if number > largest:
largest = number
return largest
def smallest(number):
smallest = 10000
if number < smallest:
smallest = number
return smallest
0
从我看到的情况来看,你有两个问题:首先,你的输入在检查之前就被处理了;其次,你的 largest()
和 smallest()
函数有问题。当你扫描用户输入时,你会立刻进入这些函数,而没有先进行验证。你可以这样重构你的循环:
input()
while(){
...
...
input()
}
至于第二个问题,你的函数之所以不工作,是因为每次运行时都会重新初始化值。你应该在文件顶部的函数头部初始化这些值,然后再进行比较。举个例子,把 largest=0
这一行移动到文件顶部,紧跟在导入语句后面。除此之外,我觉得应该就可以正常工作了。
0
如果你用一个列表来存储数字,然后利用标准库里的最大值和最小值函数,这个过程就非常简单了:
def main():
numbers = []
while True:
user_input = int(raw_input("Enter a number"))
if user_input == -99:
break
else:
numbers.append(user_input)
print('Largest is {}, smallest is {}'.format(max(numbers), min(numbers)))
0
要快速修复你的代码,可以做这样的修改:
def main():
user_input = 1
while user_input != -99:
user_input = int(input("Enter your number or -99 to end."))
if use_input == -99:
break
bigger = largest(user_input)
tinier = smallest(user_input)
print('The largest number is ', bigger, "and the smallest is ", tinier, ".")
问题在于,如果用户输入了-99,你的代码会继续执行这一轮循环的其他部分。虽然while
循环不会立刻结束,但在下一次循环之前,largest
和smallest
这两个值已经被计算过了,所以它们的值已经被覆盖了。