Python 运行 对许多用户输入的计算

Python running calculations on many user inputs

我希望我的程序从任意数量的学生那里获取任意数量的分数,并对它们进行 运行 计算。

student_number = 1

    try:
        score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
    except:
        print("The score entered is not a number. Please enter it again.")
        score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
    while score != -1:
        try:
            score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
        except:
            print("The score entered is not a number. Please enter it again.")
            score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
    more_student = input("Any more student? (Yes or No): ")
    while more_student == "Yes":
        student_number = student_number + 1
        try:
            score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
        except:
            print("The score entered is not a number. Please enter it again.")
            score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
        while score != -1:
            score = int(input("Please enter Student " + str(student_number) + "'s score (-1: Exit): "))
        more_student = input("Any more student? (Yes or No): ")
    print("done")

而不是打印(“完成”),我想以某种方式获取我收到的每个输入并能够按学生拆分,示例输出:

学生_有4个分数。他们的平均分数是_。 学生 _ 有 3 个分数。他们的平均分是_.

我猜我会使用字典?这将允许为每个学生收集数据,即。

scores = {}
student = input("Student ? ")   # Ask for student

if(student not in scores.keys()): # Create new student if necessary
    scores[student] = []

score = int(input("Score ? "))  # Generate & store score for the student
scores[student].append(score)

然后为每个学生计算分数的平均值......有很多可能性。对我来说最简单的一个:

for student, score_list in scores.items():
    nb_scores = len(score_list)
    mean_score = sum(score_list)/len(score_list)
    print("Student {} had {} scores, with a mean of {}". format(student, nb_scores, mean_score))

我包含了两个在输入 -1 时中断的无限循环。在每个学生 ID 都是键的情况下使用哈希图,并使用一个空数组进行初始化,该数组在第二个循环自行执行时存储标记。

marks = {}
while True:
    i = int(input("Enter Student ID or press -1 to exit"))
    if i == -1:
        break
    else:
        marks[i] = []
        while True:
            x = int(input("Enter Mark or press -1 to exit"))
            if x!=-1:
                marks[i].append(x)
            else:
                break


for i in marks.keys():
    count = len(marks[i])
    avg = sum(marks[i])/count
    print("Student {} has {} scores. Their average is {}".format(i, count, avg))

我刚刚为您的另一个问题输入了这个,但已被删除 -- 它看起来与这个基本问题相同。

简而言之,该方法(正如我看到的这个版本问题的公认答案已经在做的那样)是使用两个嵌套循环,在需要进入外循环时打破它们。

scores = []
while True:
    scores.append([])
    while True:
        try:
            score = int(input(
                f"Please enter Student {len(scores)}'s score (-1: Exit): "
            ))
            if score == -1:
                break
            scores[-1].append(score)
        except ValueError:
            print("The score entered is not a number. Please enter it again.")
    if input("Any more student? (Yes or No): ").lower() != "yes":
        break
print(scores)
Please enter Student 1's score (-1: Exit): 78
Please enter Student 1's score (-1: Exit): 34
Please enter Student 1's score (-1: Exit): -1
Any more student? (Yes or No): yes
Please enter Student 2's score (-1: Exit): 45
Please enter Student 2's score (-1: Exit): -1
Any more student? (Yes or No): No
[[78, 34], [45]]