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 回答
这里还有一些你可以做到这一点的方法。
首先,至少有两个人已经发布了与 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
最后,有没有办法两全其美?通常,这只是意味着使用生成器表达式而不是列表推导式。但是在这里,你需要min
和max
遍历分数,这意味着它必须是一个列表(或其他可重用的东西)。
您可以通过以下方式解决此问题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 行函数将来可能在其他问题中可重用。
您需要使用一个列表,并将每个输入的分数附加到它:
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
你快到了,你只需要制作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()
您正在scores
for 循环内创建一个变量,该变量在其外部不可见。其次,您试图scores
在每次迭代中重写该值,因为scores
它不是list
一种scalar
类型。
您应该在循环外和循环内将每个分数声明为列表中的scores
类型。list
append
scores = []
for i in range (num_judges):
scores.append(int(input("Ender a score: " )))
x=min(scores)
y=max(scores)