最高负值



我不明白为什么这不起作用。我想从一系列用户输入的负面INTS中打印最高负值。例如,用户输入:-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))

您的操作员应大于 >,不小于 <,以获取最大值。初始化至-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,收集负数的 itoble map(int, ...)将价态项目转换为INT,而max返回最大值:

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

demo

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

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

现在,您的循环不变应该是x是到目前为止观察到的最大值的。但是您实际上存储了到目前为止观察到的最小值:的确,如果新值要比少,则将其分配给x

因此,快速解决方案是更改与>的比较。但是现在初始最大将为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

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

if num < x
    x = num

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

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

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

只需使用内置的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)) 

相关内容

  • 没有找到相关文章

最新更新