【问题标题】:Python figuring out the maximum number?Python找出最大数量?
【发布时间】:2013-01-24 02:42:02
【问题描述】:

编写一个程序,反复提示用户输入整数,直到用户输入“完成”。输入“完成”后,打印出最大和最小的数字。如果用户输入的不是有效数字,请使用 try/except 捕获它并发出适当的消息并忽略该数字。

到目前为止我有这个,但我对如何创建一种比较最大值的方法感到困惑?我是编程新手,我只是寻求帮助。我是否也在尝试之前包含了 try 和 except 块?然后出现异常?

 largest = None
 smallest = None
 while True:
     num = raw_input("Enter a number: ")
     if num == "done" : break
       print num

 print "Maximum", largest

【问题讨论】:

  • 将数字存储在列表中,列表有min()max()方法。
  • @AshwiniChaudhary:不需要存储所有的用户输入。

标签: python


【解决方案1】:
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())。
【解决方案2】:
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

【讨论】:

  • 谢谢!很有道理!
  • -1 first_number 变量不是必需的。 try 也很大,应该是 1 行长。我认为这不是一个好的解决方案。
【解决方案3】:
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。您可以自己编写代码来处理异常。

【讨论】:

  • 当用户输入非数字字符串时会发生什么?
  • 在 py3x 上这会引发错误,而在 py2x 中你会得到奇怪的结果。
  • 在 Python 2.x 上,我认为它会按每个字符串的第一个字符的 ascii 值排序。然后是平局时的第二个,依此类推。
【解决方案4】:
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== 将适用于两者都没有意义、逻辑错误且易受输入的行错误。
【解决方案5】:

您可以通过对原始程序进行非常小的修改来做到这一点:只需在您考虑时保留最小和最大数字的标签。

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

【讨论】:

    【解决方案6】:
    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'
    

    【讨论】:

      【解决方案7】:

      我也是一个 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)
      

      【讨论】:

        【解决方案8】:

        通过将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 这将按字母顺序最大,可能会产生奇怪的结果
        • 是的,我一点击提交就对其进行了编辑,但您已经投了反对票。保重
        • 我没有看到任何使此代码工作的编辑。至少你需要使用 numa.append(int(raw_input(...))) - 你可以使用 float 而不是 int。还有一个 try/except 来处理来自不良数据的异常。
        • 什么?您是否在过去 10 分钟内刷新了页面?这正是我的代码所说的......
        猜你喜欢
        • 2015-01-12
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        相关资源
        最近更新 更多