Где добавить цикл while, чтобы получить минимальное и максимальное значения для правильной работы - PullRequest
0 голосов
/ 02 июня 2019

Моя проблема не в том, как правильно настроить этот раздел кодирования, чтобы заставить работать максимум и мин.

"Чтобы логика макс / мин работала правильно, ее нужно было поместить В цикл, а не после него. Из-за этого цикл WHILE был бы предпочтительным. (Или правильно используйте методы max () и min ().) "

Я попытался переместить операторы if, которые включают операторы max и min, безрезультатно. Python 3.7.3, используя IDLE.

def user_grade(statistic = None):
    f = []
    for grade in range(5):
        if statistic == "max":
            print('Max: {}'.format(max(f)))
        if statistic == "min":
            print('Min: {}'.format(min(f)))
        f.append(float(input("Enter Grade (percentage): ")))

    else:       
        print('Average: {}'.format(sum(f)/len(f)))

Ожидаемый результат: (Числа будут различаться в зависимости от ввода пользователя.)

Enter Grade (percentage): 99
Enter Grade (percentage): 98
Enter Grade (percentage): 97
Enter Grade (percentage): 96
Enter Grade (percentage): 95
Max: 99.0
Average: 97.0
None  #The 'min" should be here instead of None. 

Токовый выход:

Traceback (most recent call last):
 line 22, in <module>
    print(user_grade('max'))
   line 13, in user_grade
    print('Max: {}'.format(max(f)))
ValueError: max() arg is an empty sequence

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Код, который вы написали, подразумевает, что вы хотите:

def user_grade(statistic=None):
    grades = []

    for _ in range(5):
        grades.append(float(input("Enter Grade (percentage): ")))

    if statistic == "max":
        print('Max: {}'.format(max(grades)))
    elif statistic == "min":
        print('Min: {}'.format(min(grades)))
    else:
        print('Average: {}'.format(sum(grades) / len(grades)))

Но ваш ожидаемый вывод и цитируемый текст подразумевают что-то другое:

def user_grade():
    maximum = 0
    minimum = 100
    total = 0

    for _ in range(5):
        grade = float(input("Enter Grade (percentage): "))

        total += grade

        if grade > maximum:
            maximum = grade

        if grade < minimum:
            minimum = grade

    print('Max: {}'.format(maximum))
    print('Average: {}'.format(total / 5))
    print('Min: {}'.format(minimum))
1 голос
/ 02 июня 2019

Вы получаете сообщение об ошибке, потому что f - пустой список, когда он вызывается max(), поэтому просто поместите часть f.append() перед max().

def user_grade(statistic = None):
    f = []
    for grade in range(5):
        f.append(float(input("Enter Grade (percentage): ")))

    if statistic == "max":
        print('Max: {}'.format(max(f)))
    if statistic == "min":
        print('Min: {}'.format(min(f)))

    print('Average: {}'.format(sum(f)/len(f)))

...