0
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

4 回答 4

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 行函数将来可能在其他问题中可重用。

于 2013-02-05T19:58:25.350 回答
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
于 2013-02-05T19:49:08.763 回答
0

你快到了,你只需要制作scores一个列表并附加到它,那么这应该可以工作:

def main():
    print("*** High School Diving ***")

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

    #define scores as a list of values
    scores = []
    for i in range (num_judges):
            scores.append(int(input("Ender a score: " ))) #append each value to scores[]
    x=min(scores)
    y=max(scores)

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

main()

如果您查看文档max()min()他们实际上给了您语法,说明它需要可迭代类型(例如非空字符串、元组或列表)。

于 2013-02-05T19:51:54.293 回答
0

您正在scoresfor 循环内创建一个变量,该变量在其外部不可见。其次,您试图scores在每次迭代中重写该值,因为scores它不是list一种scalar类型。

您应该在循环外和循环内将每个分数声明为列表中的scores类型。listappend

scores = []
for i in range (num_judges):
        scores.append(int(input("Ender a score: " )))
x=min(scores)
y=max(scores)
于 2013-02-05T19:49:38.337 回答