Python如何找到最大数?

3
编写一个程序,反复提示用户输入整数,直到用户输入“done”为止。一旦输入“done”,则打印出数字中最大和最小的数字。如果用户输入的不是有效数字,则通过try/except捕获并输出适当的消息,并忽略该数字。
我已经开始了这个程序,但是我不确定如何创建一种比较最大值的方法?我刚开始学习编程,只是在寻求帮助。另外,在while循环前是否应该包括try和except块,然后对except进行错误处理?
 largest = None
 smallest = None
 while True:
     num = raw_input("Enter a number: ")
     if num == "done" : break
       print num

 print "Maximum", largest

2
将数字存储在列表中,列表具有 min()max() 方法。 - Ashwini Chaudhary
1
@AshwiniChaudhary:没有必要存储所有用户输入。 - johnsyweb
8个回答

5
nums = []
while True:
  n = raw_input("Enter a number: ")
  if n == "done":
    break
  try:
    nums.append(int(n))
  except ValueError:
    print "Invalid input"

print "Min: %d" % min(nums)
print "Max: %d" % max(nums)

-1 OP 显然是 Python 新手。可以使用他的代码解决这个问题,而不需要额外的概念(没有 list,没有 min(),没有 max())。 - salezica

3
largest = None
smallest = None
first_number = True

while True:
    num = raw_input("Enter a number: ")
    if num == "done" : break

    try:
        num = int(num)
        if first_number:
            largest = num
            smallest = num
            first_number = False
        else:
            largest = max(largest, num)
            smallest = min(smallest, num)
    except Exception, e:
        print "Not Valid Input!!!"
        continue

print "Maximum", largest
print "Minimum", smallest

谢谢!非常有道理! - user2006018
-1 那个 first_number 变量是不必要的。try 也很冗长,应该只有一行。我认为这不是一个好的解决方案。 - salezica

0
largest = None
smallest = None

while True:
num = raw_input('Enter a number: ')

if num == 'done':
    print 'Maximum is %s' % largest
    print 'Minimum is %s' % smallest
    break

try:
    num = int(num)

    if smallest is None or num <= smallest:
        smallest = num

    if largest is None or num >= largest:
        largest = num

except:
    print 'Invalid input'

0
numbers =[]
while True:
     num = raw_input("Enter a number: ")
     if num == "done" :
         break
     else:
         numbers.append(num)

print max(numbers)
print min(numbers)

所以,逻辑是将数字添加到列表中并使用max和min函数。您可以编写代码自己处理异常。

2
当用户输入非数字字符串时会发生什么? - elssar
在py3x上,这将引发错误,在py2x中你会得到奇怪的结果。 - Ashwini Chaudhary
在Python 2.x上,我认为它会按每个字符串的第一个字符的ASCII值进行排序。如果有平局,则按第二个字符进行排序,以此类推。 - elssar

0
largest =  None
smallest = None

while True:
   num = raw_input("Enter a number: ")
   if num == "done": break
   if len(num) < 1 : break
   try:
    num=int(num)
   except:
    print "Invalid input"
    continue
    if num is smallest:
      smallest = num
    if num > largest:
      largest = num
print "Maximum is ", largest
print "Minimum is ", smallest

很高兴你能做出贡献,但请更加注意细节。我不会给你点踩,但是代码缩进很糟糕,由于缺乏空白行而难以阅读,在一行中误用了 is 而应该使用 ==,逻辑有误且容易受到输入错误的影响。 - salezica

0
你可以通过对原始程序进行非常小的修改来实现这一点:在考虑数字时,只需跟踪最小和最大数字。
largest  = None
smallest = None

while True:
    string = raw_input("Enter a number: ")

    if string == "done":
        break

    try:
        num = int(string)
    except ValueError:
        print "Not a number"
        continue

    if largest is None or num > largest:
        largest = num

    if smallest is None or num < smallest:
        smallest = num

0

我也是一位初学者,正在学习Python编程。我注意到在Charles Russell Severance的《Python for Everyone》中有这个问题。以下是我的答案。

prompt = 'Enter the number: '
initial_value = 0.0
while True:
    thing = input(prompt)
    if thing == 'done':
        break
    try:
        num = float(thing)
    except:
        print('Invalid input')
        continue
    num = float(thing)
    if num > initial_value:
        max = num
        min = initial_value
    else:
        min = num
print('Max', max)
print('Min', min)

-1

通过将num分配给单个值,您正在通过循环的每次迭代覆盖它。使用列表取而代之。

num = []
finish = "n"
while finish.lower() == "n"
    try:
        num.append(int(raw_input("Enter a number: ")))
    except ValueError:
         print "Not a number"
    finish = raw_input("Would you like to add another number? (y/n): ")

print max(num)

-1 这将按字母顺序最大化,可能会产生奇怪的结果。 - wim
是的,我一提交就编辑了它,但你已经给它点了踩。保重。 - Dan Hoerst
我没有看到任何编辑使这段代码工作。至少你需要使用numa.append(int(raw_input(...))) - 你可以使用float代替int。此外,使用try/except来处理坏数据的异常。 - holdenweb
3
你最近10分钟内刷新了页面吗?这正是我的代码所显示的... - Dan Hoerst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接