Python:Loop Sentinel Value

时间:2014-10-17 19:08:43

标签: python loops python-3.3 python-idle sentinel

我应该编写一个带循环的程序,让用户输入一系列整数,然后用-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 :(得分: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循环,但它已经在那时执行了largestsmallest,因此它已被覆盖。

答案 1 :(得分:0)

据我所知,您有两个问题:您的输入在被检查之前正在处理,并且您的largest()smallest()功能存在问题。当您扫描用户输入时,您会在验证之前立即进入您的功能。像这样重构你的循环:

input()
while(){
  ...
  ...
  input()
}

对于第二部分,您的功能不起作用,因为您每次运行时都会初始化值。在文件顶部的标题中初始化函数,然后只比较它们。例如,将行largest=0移到导入语句正下方的文件顶部。除此之外,我认为它应该有用。

答案 2 :(得分: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

答案 3 :(得分: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)))