繁体   English   中英

我如何在这里使用 for 循环?

[英]How do I use a for loop here?

除了创建更多成绩变量之外,有没有办法可以使用 for 循环来创建这些变量,然后将它们输入到 def_calc 函数中? 我不允许在这个作业中使用列表,我很好奇是否有办法让我的代码看起来更漂亮、更快。

另外,对不起,如果代码不好,我对 python 真的很陌生。

def main():
  grade1 = int(input('Enter a grade: '))
  grade2 = int(input('Enter another grade: '))
  grade3 = int(input('Enter even another grade: '))
  grade4 = int(input('Enter another another grade: '))
  grade5 = int(input('Enter one last grade: '))
  calc_average(grade1 , grade2 , grade3 , grade4 , grade5)
  print('your average test grade is' , average)
def calc_average(grade1,grade2,grade3,grade4,grade5):
  global average
  average = (grade1 + grade2 + grade3 + grade4 + grade5) / 5
  return average
main()

如果你不需要使用calc_average function,你可以尝试这样的事情:

def main():
    total = 0
    for i in range(5):
        total += int(input('Enter a grade: '))
    
    print('your average test grade is' , total / 5)

当然,您可以使用for循环来执行此操作。 您可以编写一个get_grades function ,其中包含用户应输入多少等级的参数:

def get_grades(num_grades):
    pass

然后使用for循环num_grades次数来将新成绩添加到运行总计中(如果您不打算将成绩用于检查平均值以外的任何事情)。 这是一些伪代码:

  1. 初始化一个grades_total
  2. 要求用户输入成绩
  3. 将该成绩添加到grades_total
  4. 重复步骤 2 和 3 num_grades
  5. grades_total除以num_grades

如果您确实需要将成绩用于任何其他计算,那么如果不使用listtuple之类的集合,这是不可能的。

您还可以使用while loop来添加更多成绩:

import numpy as np
def main():
    n = 0
    grade_list = []
    while True:
        n = n + 1
        grade_str = input(f'Enter grade {n}, or Enter `c` to stop: ')
        if grade_str == 'c':
            if len(grade_list) > 0:
                average = np.mean(grade_list)
                print('your average test grade is' , average)
            break
        grade_list.append(int(grade_str))
main()   

您可以使用 for 循环来避免手动一遍又一遍地重复某些内容。 因此,在您的代码中,您可以将其设置为 for 循环,而不是输入 5 次:

def grade_average(n_grade = 5):

    sum_of_grades = 0
    for i in range(n_grade):
        grade = int(input('Enter a grade({} out of {}):'.format(i+1,n_grade)))
        sum_of_grades += grade

    average_grade = sum_of_grades / n_grade
    print('your average test grade is' , average_grade)


grade_average()

您还可以通过不显示每个步骤并使其更短来摆脱一些行。 例如,查看@epsilonmajorquezero 提供的响应。

这是一种添加一些输入验证的方法:

def get_number_input(prompt):
    num = -1
    while True:
        try:
            num = float(input(prompt))
            break
        except:
            print('Error: Enter a number, try again...')
    return num


def main():
    number_of_grades = 5
    total = 0
    for g in range(1, number_of_grades + 1):
        total += get_number_input(f'Please enter grade {g} of {number_of_grades}: ')
    average_grade = total / number_of_grades
    print(f'The average of the {number_of_grades} grades you entered is: {average_grade:.2f}')


if __name__ == '__main__':
    main()

示例用法:

Please enter grade 1 of 5: 45
Please enter grade 2 of 5: a
Error: Enter a number, try again...
Please enter grade 2 of 5: 98
Please enter grade 3 of 5: 58
Please enter grade 4 of 5: 78.40
Please enter grade 5 of 5: 96.89
The average of the 5 grades you entered is: 75.26

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM