如何在Python3中计算用户输入的最小值和最大值
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 个回答
你在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)
这里有一些其他的方法可以做到这一点。
首先,至少有两个人已经发了和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