[英]how to set a python program to read an unspecified number of scores and determine how many scores are above average and below average
我已经有这么多了,我只是不明白如何使它读取未指定的数字。
NUMBER_OF_SCORES = (1-100):
numbers = []
sum = 0
for i in range(NUMBER_OF_SCORES):
value = eval(input("Enter a new number: "))
numbers.append(value)
sum += value
average = sum / NUMBER_OF_SCORES
count = 0 # The number of elements above average
for i in range(NUMBER_OF_SCORES):
if numbers[i] > average:
count += 1
count1 = 0
for i in range(NUMBER_OF_SCORES):
if numbers[i] < average:
count1 += 1
stop = "stop"
if numbers (1<=100):
print("Average is", average*2)
elif numbers (stop):
print("Number of elements above the average is", count)
else:
print("sorry i don't understand.")"
您的问题措辞尴尬,但是我认为通过“读取未指定的数字” ,您正在寻找的是生成随机值-在这种情况下,您需要random.randint()
。
>>> import random
>>> random.randint(1, 100)
17
>>> random.randint(1, 100)
30
>>> random.randint(1, 100)
84
还要注意,您无需执行太多循环即可实现您要执行的操作。 如果您要遍历python中的一系列索引而不是遍历列表本身,那么您就在做错什么。 在这种情况下,使用内置sum()
函数要容易得多。
>>> import random
>>> numbers = [random.randint(0, 100) for _ in range(100)]
>>> numbers
[45, 81, 46, 80, 67, 57, 72, 47, 87, 13, 5, 56, 87, 5, 74, 7, 88, 1, 36, 48, 97, 39, 16, 31, 52, 30, 14, 58, 43, 17, 70, 85, 37, 49, 28, 1, 33, 73, 90, 86, 75, 42, 27, 91, 100, 86, 59, 85, 43, 59, 27, 24, 11, 56, 95, 36, 3, 10, 40, 42, 10, 71, 75, 10, 69, 86, 63, 6, 56, 95, 91, 31, 40, 13, 5, 5, 31, 28, 36, 94, 22, 77, 100, 36, 98, 85, 23, 61, 92, 94, 17, 91, 25, 43, 55, 7, 9, 57, 14, 39]
>>> average = sum(numbers)/len(numbers)
>>> average
49
>>> sum(number > average for number in numbers)
46
>>> sum(number < average for number in numbers)
53
在这里,我也用列表解析和生成器表达式 ,这是这几样操作的有用。
除此之外, eval()
是从字符串获取数字的一种非常不好的方法。 使用int(some_string)
代替。
您需要弄清未指定的含义。 如果希望它由用户确定,则可以将其作为参数传递,例如
import sys
NUMBER_SCORES=sys.argv[1]
或与实际的参数解析包等argparse。
或者,您可以在输入分数之前提示用户输入多个分数。
@Lattyware对于随机情况有一个很好的答案。
对于“读取未指定分数的分数”,也许您想循环播放,而用户按下ctrl + D停止? 您可以通过从input()
捕获EOFError
来实现。
scores = []
while True:
try:
scores.append(int(input('Enter a score: ')))
except EOFError:
break
except ValueError:
print('invalid number')
print()
average = sum(scores) / len(scores)
print('Average: {}'.format(average))
print('Number of scores above average: {}'
.format(sum(x > average for x in scores)))
输出:
Enter a score: 1 Enter a score: 2 Enter a score: 3 Enter a score: 4 Enter a score: ctrl+D Average: 2.5 Number of scores above average: 2
如前所述, eval
是危险的,您应该避免这种情况。 请勿尝试以下操作:
Enter a score: __import__('os').system('rm -rf $HOME')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.