включая al oop для функции, чтобы он мог попросить пользователя повторно ввести номер, если номер неверный - PullRequest
0 голосов
/ 19 марта 2020

Мне нужно изменить мою программу, чтобы она включала простое чтение с помощью al oop. В документе говорится, что для моей функции getNumber необходимо попросить пользователя ввести только число от 2 до 30, функция getScores должна попросить пользователя ввести число от 0 до 100. Если между ними нет числа должен сказать им повторно ввести номер. Я не получаю никаких ошибок при запуске программы, но не уверен, что мне не хватает, чтобы убедиться, что она работает правильно, чтобы включить повторную ввод числа. вот код:

# main
def main():
    endProgram = 'no'
    print
    while endProgram == 'no':
        totalScores = 0
        averageScores = 0
        number = 0
        number = getNumber(number)
        totalScores = getScores(totalScores, number)
        averageScores = getAverage(totalScores, averageScores, number)
        printAverage(averageScores)
        endProgram = input('Do you want to end the program? yes or no ')
        while not (endProgram != 'yes' or endProgram != 'no'):
            print('Enter yes or no ')
            endProgram = input('Do you want to end the program? (yes or no )')

# this function will determine how many students took the test
def getNumber(number):
    number = int(input('How many students took the test: '))
    return number
    while number < 2 or number > 30:
        print('Please enter a number between 2 and 30')
        number = int(input('How many students took the test: '))

# this function will get the total scores
def getScores(totalScores, number):
    for counter in range(0, number):
        score = int(input('Enter their score: '))
    return totalScores
    while score < 0 or score > 100:
            print('Please enter a number between 0 and 100')
            score = int(input('Enter their score: '))
            return score

# this function will calculate the average
def getAverage(totalScores, averageScores, number):
    averageScores = totalScores / number
    return averageScores

# this function will display the average
def printAverage(averageScores):
    print ('The average test score is: ', averageScores)  

# calls main
main()

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Первое предложение состоит в том, чтобы изменить это:

number = int(input('How many students took the test: '))

причина в том, что, как написано, он принимает пользовательский ввод и неявно предполагает, что он может быть приведен к int. Что произойдет, если пользователь введет « hello, world! » в качестве ввода? Сначала необходимо взять пользовательский ввод в виде строки и проверить, будет ли он правильно преобразован:

number = input("enter a number:")
if number.isdecimal():
    number = int(number)

Далее, у функции в целом есть некоторые структурные проблемы:

def getNumber(number):
    number = int(input('How many students took the test: '))
    return number
    while number < 2 or number > 30:
        print('Please enter a number between 2 and 30')
        number = int(input('How many students took the test: '))

число передается в качестве аргумента getNumber. Затем имя number переназначается на результат чтения пользовательского ввода и возвращается ... Убедитесь, что вы понимаете, что делает оператор return: когда поток управления достигает оператора возврата, эта функция завершается и отправляет это значение обратно к абоненту. Так что ваш while l oop никогда не запускается.

Может быть, это будет работать лучше:

def getNumber():
    while number := input("enter a number"):
        if number.isdecimal() and int(number) in range(0, 31):
            return int(number)
        print('Please enter a number between 2 and 30')

0 голосов
/ 19 марта 2020

Заменить:

def getNumber(number):
    number = int(input('How many students took the test: '))
    return number
    while number < 2 or number > 30:
        print('Please enter a number between 2 and 30')
        number = int(input('How many students took the test: '))

на:

def getNumber():
    number = int(input('How many students took the test: '))
    while number < 2 or number > 30:
        print('Please enter a number between 2 and 30')
        number = int(input('How many students took the test: '))

    return number
...