-1

我应该编写一个带有循环的程序,让用户输入一系列整数,然后输入 -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

4 回答 4

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在那时它已经被覆盖了。

于 2014-10-17T19:12:28.870 回答
0

如果您使用列表来存储数字并依赖标准库中的 max/min 函数,则非常简单:

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)))
于 2014-10-17T19:30:46.517 回答
0

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

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

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

于 2014-10-17T19:15:32.193 回答
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
于 2014-10-17T19:18:04.463 回答