如何在Python3中计算用户输入的最小值和最大值

0 投票
4 回答
13899 浏览
提问于 2025-04-17 14:52
def main():
    print("*** High School Diving ***")

    num_judges=int(input("How many judges are there? "))

    for i in range (num_judges):
            scores=int(input("Ender a score: " ))
    x=min(scores)
    y=max(scores)

    print("Min: ", x)
    print("Max: ", y)

main()

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

4 个回答

0

你在for循环里面创建了一个变量scores,这个变量在循环外面是看不见的。其次,你在每次循环中都试图重新给scores赋值,但scores并不是一个列表,而是一个标量类型,也就是说它只能存一个值。

你应该在循环外面把scores声明为一个列表类型,然后在循环里面把每个分数添加到这个列表里。

scores = []
for i in range (num_judges):
        scores.append(int(input("Ender a score: " )))
x=min(scores)
y=max(scores)
1

这里有一些其他的方法可以做到这一点。

首先,至少有两个人已经发了和Martijn Pieters的第一个回答完全相同的内容,我也不想被落下,所以:

scores = []
for i in range(num_judges):
    scores.append(int(input("Enter a score: ")))
x=min(scores)
y=max(scores)

现在,每当你创建一个空列表并在循环中往里面添加东西时,这和使用列表推导式是一样的,所以:

scores = [int(input("Enter a score: ")) for i in range(num_judges)]
x=min(scores)
y=max(scores)

另外,如果num_judges非常大,而你又不想为了找到最小值和最大值而构建一个巨大的列表呢?那么你可以在处理的过程中跟踪它们:

x, y = float('inf'), float('-inf')
for i in range(num_judges):
    score = int(input("Enter a score: "))
    if score < x:
        x = score
    if score > y:
        y = score

最后,有没有办法兼顾两者的好处呢?通常,这意味着使用生成器表达式而不是列表推导式。但在这里,你需要同时获取minmax来遍历分数,这就意味着必须用列表(或者其他可以重复使用的东西)。

你可以用tee来解决这个问题:

scores= (int(input("Enter a score: ")) for i in range(num_judges))
scores1, scores2 = itertools.tee(scores)
x = min(scores1)
y = max(scores2)

不过,这其实并没有什么帮助,因为在后台,tee会创建一个和你本来要创建的列表是一样的。(tee在你需要并行遍历两个迭代器时非常有用,但在这种情况下就不太适用了。)

所以,你需要写一个min_and_max函数,这个函数看起来会和前面例子中的for循环非常相似:

def min_and_max(iter):
    x, y = float('inf'), float('-inf')
    for val in iter:
        if val < x:
            x = val
        if val > y:
            y = val
    return x, y

然后,你可以用一个漂亮、易读的一行代码来完成整个事情:

x, y = min_and_max(int(input("Enter a score: ")) for i in range(num_judges))

当然,当你为了让它工作而写了一个8行的函数时,这并不算真正的一行代码……不过这个8行的函数在未来可能会在其他问题中重复使用。

1

你需要使用一个列表,把每次输入的分数都加到这个列表里:

scores = []
for i in range (num_judges):
    scores.append(int(input("Enter a score: " )))

max()min() 函数可以从这个列表中分别找出最高和最低的分数。

而你之前做的,是在每次循环时用一个新值替换掉 scores;然后试图找出一个整数的 min(),这样是行不通的:

>>> min(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

通过使用列表,min() 函数可以遍历这个列表,找到你想要的最小值:

>>> min([1, 2, 3])
1

撰写回答