1

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

4 回答 4

3

您的运算符应大于 >,不小于<,以便取最大值。初始化以-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)

done您可以改为使用 a来删除变量while True...break


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

您可以在一行中使用iter您的哨兵 0重复调用input,收集一个可迭代的负数。map(int, ...)将可迭代项转换为整数,同时max返回最大值:

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

演示

>>> m = max(map(int, iter(input, '0')))
-3
-1
-4
-2
0
>>> m
-1
于 2017-06-27T12:40:46.877 回答
3

那么最大的负值与最大值相同。

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

所以一个快速的解决方法是更改​​为比较>。但现在初始最大值将是0。我们可以通过将初始值设置为 example 来更改它,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
于 2017-06-27T12:41:14.230 回答
1

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

if num < x
    x = num

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

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

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

于 2017-06-27T12:40:25.207 回答
1

只需使用内置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)) 
于 2017-06-27T12:42:15.797 回答