0

所以基本上我有这个代码:

from collections import OrderedDict as OD
person = OD({})

for num in range(10):
    person[num] = float(input())

tall = max(person.values())
short = min(person.values())

key_tall = max(person.keys())
key_short = min(person.keys())

print(f'The shortest person is the person number {key_short} who is {short}meters tall')
print(f'The tallest person is the person number {key_tall} who is {tall}meters tall')

理论上,当我在字典中放 10 个人时,第一个数字是 1,一直到 9,最后一个是 0,输出应该是:

The shortest person is the person number 9 who is 0.0m meters tall
The tallest person is the person number 8 who is 9.0m meters tall


但实际上它打印:

The shortest person is the person number 0 who is 0.0m meters tall
The tallest person is the person number 9 who is 9.0m meters tall

由于某种原因,当我的字典的值从 1 一直到 10 时,它工作正常。

关于为什么会发生这种情况以及如何解决它的任何想法?

4

1 回答 1

0
key_tall = max(person.keys())
key_short = min(person.keys())

您的是整数0..9,因此预计您将获得90对于这两个值,因为您要求的是最小/最大键而不考虑值。

似乎在寻找具有最高/最低价值的人的钥匙,但这不是该代码会给您的。

如果您要查找具有最大值的项目的索引,则可以执行以下操作:

indexes_tall = [idx for idx in range(len(person)) if person[idx] == max(person.keys())]

这将为您提供与最高值匹配的索引列表,然后您可以根据需要对其进行处理。举个例子:

from collections import OrderedDict as OD
person = OD({})

for num in range(10):
    person[num] = float((num + 1) % 10) # effectively your input

tall = max(person.values())
short = min(person.values())

keys_tall = [str(idx + 1) for idx in range(len(person)) if person[idx] == max(person.keys())]
keys_short = [str(idx + 1) for idx in range(len(person)) if person[idx] == min(person.keys())]

print(f'The shortest height of {short}m is held by: {" ".join(keys_short)}')
print(f'The tallest height of {tall}m is held by: {" ".join(keys_tall)}')

会给你:

The shortest height of 0.0m is held by: 10
The tallest height of 9.0m is held by: 9
于 2020-09-14T13:09:08.747 回答