【问题标题】:Print largest and smallest number in python在python中打印最大和最小的数字
【发布时间】:2019-10-17 19:23:45
【问题描述】:

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

我在打印最大和最小数字时遇到问题。其打印不正确的数字通过以下方法:

largest = None
smallest = None
list1 = []
while True:
    num = input("Enter a number: ")
    if num == "done" : break
    try:
        val = int(num)
        if int(num):
            list1.append(num)
    except:
        print("Invalid input") 
print("Maximum is " + max(list1))
print("Minimum is " + min(list1))

我输入的数字是 7、2、bob、10 和 4。

其打印输出为: 输入无效 最大值为 7 最小值为 10

虽然我正在寻找的输出是: 输入无效 最大值为 10 最小值为 2

【问题讨论】:

  • 你想特殊对待0的值吗?现在你的逻辑(当语法是固定的)忽略 0 因为if 0 评估为False
  • 此外,您还可以通过在获得新数字时跟踪最小和最大数字来更有效地执行此操作。不需要list

标签: python


【解决方案1】:

不使用列表,您需要两个值来跟踪用户输入的最大值和最小值。当用户输入“完成”以外的非数字输入时,使用 try 和 except 来处理大小写。

比使用列表存储值、排序数据然后得到最终结果更快更好的方法

import sys

min_val = sys.maxsize
max_val = -sys.maxsize-1

flag = True
while flag:
    user_input = input()
    if user_input == 'done':
        flag = False
    else:
        try:
            user_input = int(user_input)
            if user_input>max_val:
                max_val = user_input
            if user_input<min_val:
                min_val = user_input
        except ValueError:
            print('Enter a Valid Number')



print('Maximum Value is {}'.format(max_val))
print('Minimum value is {}'.format(min_val))

【讨论】:

    【解决方案2】:

    您必须在列表中附加int,而不是str

    改变这个:

    if int(num):
        list1.append(num)
    

    到以下之一:(if int(num) 是不必要的。)

    list1.append(int(num))
    

    list1.append(val)
    

    您还必须在打印语句中连接之前转换为字符串:

    print("Maximum is " + str(max(list1)))
    print("Minimum is " + str(min(list1)))
    

    修改后,您的程序应如下所示:

    largest = None
    smallest = None
    list1 = []
    while True:
        num = input("Enter a number: ")
        if num == "done" : break
        try:
            val = int(num)
            list1.append(val)
        except ValueError:         # it is always better to specify what type of error you are expecting to catch
            print("Invalid input") 
    print("Maximum is " + str(max(list1)))
    print("Minimum is " + str(min(list1)))
    

    【讨论】:

    • 它现在给我错误:不能连接 'str' 和 'int' 对象
    • 是的,抱歉,您必须在打印前转换回字符串进行连接(请参阅答案中的更新)
    【解决方案3】:

    您将 num 转换为 int 并将其存储在 val 中,但随后您忽略了它并将原始 num 插入到您的列表中。由于它是一个字符串,Python 会按字母顺序取最小值,所以“10”小于“2”。

    要修复它,您只需在列表中插入 val

        val = int(num)
        if val:
            list1.append(val)
    

    【讨论】:

    • 为什么要保留if val
    • 它仍然给我同样的输出。
    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 2021-07-09
    • 2018-03-08
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多