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()
答案 0 :(得分: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
答案 1 :(得分: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
最后,有没有办法让两全其美?通常,这只是意味着使用生成器表达式而不是列表推导。但是在这里,您需要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行函数在将来的其他问题中可以重用。
答案 2 :(得分:0)
您正在for循环中创建一个变量scores
,该变量在其外部不可见。其次,您试图在每次迭代中覆盖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)
答案 3 :(得分: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()
的文档,他们实际上会给你一个语法,它需要一个可迭代的类型(例如非空字符串,元组或列表) )。