4 回答
TA贡献2012条经验 获得超12个赞
在这里,您的问题可以分为几个部分,
从用户处获取考试次数
从用户获取这些考试的有效输入
计算所有考试的平均值
计算等级分布
如果用户输入为 -1,则退出
下面的代码遵循所有这些步骤
#calculating Average
def calc_average(scores):
return sum(scores)/len(scores)
grade_dist = {
(90, 101):'A',
(80,90):'B',
(70, 80):'C',
(59, 70):'D',
(0,59):'F'
}
def get_grade_freq(scores):
grades = {'A':0, 'B':0, 'C':0, 'D':0, 'F':0}
for score in scores:
for k, v in grade_dist.items():
if score in range(k[0], k[1]):
grades[v]+=1
print("Grade distributions")
for grade, number in grades.items():
print("Number of {}’s = {}".format(grade, number))
def get_scores(n):
scores = []
cond = True
while cond and n>0:
score = int(input("Enter an exam score between 0 and 100 or -1 to end : "))
if score==-1:
cond=False
return -1
if score not in range(0,101):
print("Sorry, {} is not in the range of 0 and 100 or -1. Try Again!".format(score))
if score in range(0,101):
scores.append(score)
n-=1
return scores
def main():
n = int(input('total number of exams ' ))
scores = get_scores(n)
if scores == -1:
exit(-1)
average = calc_average(scores)
print("You entered {} valid exam scores with an average of {}.".format(n, average))
get_grade_freq(scores)
if __name__=='__main__':
main()
TA贡献1111条经验 获得超0个赞
每当有多个类似事物的实例需要操作(评分范围、总数)时,都必须尝试使用多值结构,而不是单个变量。Python的列表和字典旨在收集多个条目作为位置列表或键控索引(字典)。
这将使您的代码更加通用。当您操作概念而不是实例时,您将知道自己走在正确的轨道上。
例如:
grading = [(None,101),("A",90),("B",80),("C",70),("D",60),("F",0)]
scores = {"A":0, "B":0, "C":0, "D":0, "F":0}
counts = {"A":0, "B":0, "C":0, "D":0, "F":0}
while True:
input_value = input("Enter an exam score between 0 and 100 or -1 to end: ")
value = int(input_value)
if value == -1: break
score = next((s for s,g in grading if value >= g),None)
if score is None:
print("sorry ",input_value," is not -1 or in range of 0...100")
continue
scores[score] += value
counts[score] += 1
inputCount = sum(counts.values())
average = sum(scores.values())//max(1,inputCount)
print("")
print("You entered", inputCount, "valid exam scores with an average of: ", average)
print("------------------------------------------------------------------------")
print("Grade Distribution:")
for grade,total in counts.items():
print(f"Number of {grade}'s: ",total)
该列表包含分数字母和最小值(以元组为单位)对。这样的结构将允许您通过查找值低于或等于输入值的第一个条目并使用相应的字母,将中的成绩值转换为评分字母。grading
同一列表用于验证输入值,方法是有策略地将 None 值放在 100 之后,并且不低于零的值。该函数将为您执行搜索,并在不存在有效条目时返回 None。next()
您的主程序循环需要继续,直到输入值为 -1,但它需要至少通过输入一次(典型的重复-直到结构,但在 Python 中只有一个)。因此,该语句将永远循环(即在 True 时),并且在满足退出条件时需要任意中断。whilewhile
为了累积分数,字典 () 比列表更适合,因为字典将允许您使用键(分数字母)访问实例。这允许您跟踪单个变量中的多个分数。计算每个分数的输入数量也是如此。scores
要获得最后的平均值,您只需将字典的值分数相加,然后除以添加到字典中的分数计数即可。scorescounts
最后,要打印分数计数的摘要,您可以再次利用字典结构,并且只为所有分数字母和总计编写一个广义的打印行。
TA贡献1843条经验 获得超7个赞
以下是我的演练解释:
因此,该程序应该询问用户他们得到了什么分数,直到他们说他们得到了一个分数,在你给他们结果之后。要循环直到它们给出,我们可以使用一个循环:-1-1while
inp = float(input("Enter an exam score between 0 and 100 or -1 to end: ")) # Get input
grades = []
while inp > -1: # Loop until user gives a score of -1
if inp >= 0 and inp <= 100: # Check if valid grade
grades.append(inp) # Add grade to grades list
inp = float(input("Enter an exam score between 0 and 100 or -1 to end: ")) # Ask again
else:
print("Sorry", inp, "is not in the range of 0 and 100 or -1. Try again!") # Invalid grade
# ANALYSIS OF GRADES
# Format first line of output - the first str(len(grades)) give the amount of grades they entered,
# and the str(sum(grades) / len(grades)) gives the average of the grades list.
print("You entered", str(len(grades)), "valid exam scores with an average of", str(sum(grades) / len(grades)))
print("Grade Distribution:")
print("Number of A's =", str(sum(90 <= g <= 100 for g in grades)) # I am using a very short notation
print("Number of B's =", str(sum(80 <= g <= 89 for g in grades)) # here - this is basically counting
print("Number of C's =", str(sum(70 <= g <= 79 for g in grades)) # the number of grades that are
print("Number of D's =", str(sum(60 <= g <= 69 for g in grades)) # a valid value based on the checks
print("Number of F's =", str(sum(0 <= g <= 59 for g in grades)) # I am making.
希望我的评论能帮助你弄清楚我的代码中发生了什么!
TA贡献1831条经验 获得超9个赞
这可能适用于您:
scores = {
"A": 0,
"B": 0,
"C": 0,
"D": 0,
"F": 0,
}
total = 0
count = 0
input_value = 0
while (input_value != -1) and (count < 4):
input_value = int(input("Enter an exam score between 0 and 100 or -1 to end: "))
if 0 <= input_value <= 100:
total += input_value
count += 1
if input_value >= 90:
scores["A"] += 1
elif input_value >= 80:
scores["B"] += 1
elif input_value >= 70:
scores["C"] += 1
elif input_value >= 60:
scores["D"] += 1
else:
scores["F"] += 1
else:
print("Sorry", input_value, "is not in the range of 0 and 100 or -1. Try again!")
print("You entered {} valid exam scores with an average of: {}".format(count, total / count))
print("------------------------------------------------------------------------")
print("Grade Distribution:")
print("Number of A's: ", scores['A'])
print("Number of B's: ", scores['B'])
print("Number of C's: ", scores['C'])
print("Number of D's: ", scores['D'])
print("Number of F's: ", scores['F'])
添加回答
举报