【问题标题】:Why this gives min as 10 and max as 7 [duplicate]为什么这将最小值设为 10,最大值设为 7 [重复]
【发布时间】:2020-12-08 09:51:36
【问题描述】:

对于,下面的代码: (缩进输出给定输入的最大值和最小值,结束并在键入完成时打印值并处理字符串输入的异常)

    largest = None
    smallest = None
    while True:
        try:
            numb = input("Enter a number: ")
            if num == "done":
                break
            print(num)
            numb = int(num)
            if largest is None or largest < num:
                largest = num
            elif smallest is None or smallest > num:
                smallest = num
        except ValueError:
            print("Please, enter only numbers.")
    

    print("Maximum", largest)
    print("Minimum", smallest)

将输入值输入为 7、2、bob、10、4 并完成; 为什么我会得到 最低为 10 最大为 7

相反,当我将 numb 更改为 num 时,我得到了正确的值,例如 最低为 2 最大为 10

请解释一下 numb 究竟是如何将 min 设为 10 并将 max 设为 7 的。 (我知道我可以通过将 numb 与 if 循环进行比较来纠正它,但我更想知道这种特殊情况究竟如何将最小值设为 10,最大值设为 7)

【问题讨论】:

  • 您没有将name 声明为变量,但您正在检查"done"。它会如何比较?

标签: python loops for-loop exception while-loop


【解决方案1】:

我假设你的代码最初是 num = input(...) 而不是 numb = input(...)

使用largest &lt; numlargest = num,您正在使用字符串。比较工作按字典顺序,即'a' &lt; 'b''10' &lt; '7''2' &lt; 'c'。因此,您的代码将根据字典顺序找到最大值和最小值。

输入的正确顺序是:

10, 2, 4, 7, bob

bob 被排除在外,因为int(num) 会引发异常。在这里,您的最小值为 10,最大值为 7。

现在,使用largest &lt; numb,您正在使用整数。这些是按照您通常期望的顺序排列的:

2, 4, 7, 10

这将为您提供您期望的结果。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 2016-04-07
    • 1970-01-01
    • 2017-11-14
    • 2015-05-19
    • 2017-07-28
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多