【问题标题】:Python running calculations on many user inputsPython 在许多用户输入上运行计算
【发布时间】:2021-11-07 01:32:42
【问题描述】:

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

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")

而不是 print("done"),我想以某种方式获取我收到的每个输入,并能够按学生将其拆分,例如输出:

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

【问题讨论】:

  • 你可以使用列表。或 array.append 分数直到完成,然后检索它们。
  • @sittsering 如果我使用列表,我是否应该在一开始就生成一个空白列表,然后在每次输入后使用 list.append 添加到它?
  • 是的!检查此链接“w3schools.com/python/python_lists.asp”以了解有关列表的更多信息
  • 非常感谢你们

标签: python exception input while-loop


【解决方案1】:

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

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))

【讨论】:

【解决方案2】:

我包含了两个在输入 -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))

【讨论】:

    【解决方案3】:

    我刚刚为你的另一个被删除的问题输入了这个 - 它看起来和这个问题相同。

    简而言之,方法是使用两个嵌套循环,当需要转到外部循环时打破它们。

    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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多