我不明白为什么这不起作用。我想从一系列用户输入的负值中打印最高负值。例如,用户输入:-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))
答案 0 :(得分: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
来删除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
答案 1 :(得分:3)
最高负值与最大值相同。
现在你的循环不变量应该是x
是迄今为止观察到的最大值。但实际上存储了迄今为止观察到的最小值:实际上,如果新值小于,则将其分配给x
。
因此,快速解决方法是更改为与>
进行比较。但现在最初的最大值将为0
。我们可以通过将初始值设置为None
,如果x
为None
来更改,请将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
答案 2 :(得分:1)
到目前为止,您永远不会将输入值与最大负值进行比较。您还将初始值设置为零,这不是合适的结果值。处理这些问题的一种方法是替换你的行
if num < x
x = num
与
if num < 0 and (x == 0 or x < num < 0):
x = num
当然,还有其他方法,包括将x
设置为尽可能小的负数。这样可以简化您的比较,因为在我上面的代码中,只检查了x
之前从未设置的内容。
请注意,如果根本没有负数输入,则结果为零。这可能是也可能不是你想要的。
答案 3 :(得分: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))