【问题标题】:Highest Negative Value最高负值
【发布时间】:2017-11-30 12:28:17
【问题描述】:

我不明白为什么这不起作用。我想从一系列用户输入的负整数中打印出最高负值。例如,用户输入:-1、-5、-3,程序返回 -1。但是我的程序(如下)返回-5。为什么是这样?我的代码完全搞砸了吗?我知道我可以使用列表和最大方式来解决它,但我不想让程序过于复杂。

x = 0
done = False
while not done:
    y = int(input("Enter another number (0 to end): "))
    num = y
    if num != 0:
        if num < x:
            x = num
    else:
        done = True
print(str(x))

【问题讨论】:

  • 因为-5
  • 您将 x 设置为最小的数字,而不是最大的数字。反转if num &lt; x中的比较器。
  • "我知道我可以使用列表和最大方式来解决它,但我不想使程序过于复杂" 您的方式会使程序过于复杂。使用max 将是一行代码。

标签: python python-3.x user-input highest


【解决方案1】:

到目前为止,您永远不会将输入的值与最大的负值进行比较。您还将初始值设置为零,这不是合适的结果值。处理这些问题的一种方法是替换您的行

if num < x
    x = num

if num < 0 and (x == 0 or x < num < 0):
  x = num

当然,还有其他方法,包括将x 设置为可能的最小负数。这将简化您的比较,因为在我上面的代码中,只检查了 x 之前从未设置过。

请注意,如果根本没有负数输入,则结果为零。这可能是也可能不是你想要的。

【讨论】:

    【解决方案2】:

    您的运算符应大于&gt;,不小于&lt;,以便取最大值。初始化为-float('inf') 确保第一个负值通过条件:

    x = -float('inf')
    while True:
        num = int(input("Enter another number (0 to end): "))
        if num != 0:
            if num > x:
                x = num
        else:
            break
    print(x)
    

    您可以改用while True...break 来删除done 变量。


    我知道我可以使用列表和最大方式来解决它,但我不想 程序过于复杂。

    您可以在一行中使用 iter 和您的 sentinel 0 反复调用 input,收集 iterable em> 的负数。 map(int, ...) 将可迭代项转换为整数,而 max 返回最大值:

    max(map(int, iter(input, '0')))
    

    演示

    >>> m = max(map(int, iter(input, '0')))
    -3
    -1
    -4
    -2
    0
    >>> m
    -1
    

    【讨论】:

    • 这是很好的代码。感谢您解释它并展示单行示例。这令人印象深刻!
    【解决方案3】:

    最高负值与最大值值相同。

    现在你的循环不变量应该是x迄今为止观察到的最大值。但是您实际上存储了迄今为止观察到的最小值:实际上,如果新值小于,则将其分配给x

    因此,快速解决方法是更改​​为与&gt; 进行比较。但现在最初的最大值将是0。我们可以更改它,例如将初始值设置为None,如果xNone,则将x 设置为输入的值。

    x = None
    done = False
    while not done:
        y = int(input("Enter another number (0 to end): "))
        num = y
        if num != 0:
            if x is None or num > x:
                x = num
        else:
            done = True
    

    【讨论】:

    • 很好的解决方案。谢谢!我不熟悉使用 None,但我现在会记住它以供将来参考。
    【解决方案4】:

    只需使用内置的max 函数来查找最大数量

    numbers = []
    done = False
    while not done:
        number = int(input("Enter another number (0 to end): "))
        if number < 0:
            numbers.append(number)
        else:
            done = True
    
    print(max(numbers)) 
    

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      相关资源
      最近更新 更多