Моя программа поддерживает функцию печати спама Python - PullRequest
1 голос
/ 25 апреля 2020

Чувак, я здесь сегодня много.

Хорошо, так что я только что закончил свое задание. Моя единственная проблема на этом этапе - когда я go проверяю «остальное», он продолжает печатать спам, пока я не остановлю его.

Вот полный код.

import re
from statistics import mean


def file_info():

    # Open & read file
    grades_file = open('grades.txt', 'r')
    file_contents = grades_file.read()

    # Print Header & spacer
    print('Name' + '\t\tGrade')
    print('---------------------')

    # Print contents of file
    print(file_contents.rstrip('\n'))

    # Extract numbers from file, calculate avg
    num_list = re.findall(r"[-+]?\d*\.\d+|\d+", file_contents)
    grades = [float(num) for num in num_list]
    average = mean(grades)

    # Print avg
    print('Average Grade:', format(average, '.2f'))

    # Close file
    grades_file.close()


def main():
    file_info()

    # Open file to append
    grades_file = open('grades.txt', 'a')

    # Continue program press y or n
    fwd = str(input('\nAdd another student (Y/N): '))

    while True:

        if fwd.lower() == 'y':
            while True:
                name = str(input("Enter student's name: "))

                if not name.isalpha():
                    print("Please enter a valid name.")
                    continue
                else:
                    break
            while True:
                grade = float(input("Enter student's grade: "))

                if grade < 0:
                    print("Input grade between 0-100.")
                    continue
                elif grade > 100:
                    print("Input grade between 0-100.")
                    continue
                else:
                    break

            # Write data to file
            grades_file.write(name + ' ' + str(grade) + '\n')

            # Continue adding more students?
            cont = str(input('Add another student (Y/N): '))

            if cont.lower() == 'y':
                continue

            elif cont.lower() == 'n':
                grades_file.close()
                file_info()
                exit()

            else:
                print('Choose "Y" or "N"')

        elif fwd.lower() == 'n':
            exit()

        else:
            print('Choose "Y" or "N"')
            continue


main()

Если Я пытаюсь проверить последний оператор «else», он спамит «Выбрать Y или N» до тех пор, пока я не остановлю программу.

Единственное, что останавливает его, это если я «ломаю», но затем программа останавливается и не Не пытайтесь снова спросить пользователя. Идеи?

Редактировать: Вот как выглядит вывод

Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"
Choose "Y" or "N"

Ответы [ 4 ]

4 голосов
/ 25 апреля 2020

Вы не запрашиваете новый ввод от пользователя.

        else:
            fwd=input('Choose "Y" or "N"')
            continue

должно работать.

--- EDIT ---

Но я думаю, что код сложнее, чем нужно. Нет причин использовать переменные fwd и cont, нужна только одна. Это должно сделать также:

def main():
    file_info()

    # Open file to append
    grades_file = open('grades.txt', 'a')

    # Continue program press y or n


    while True:
        fwd = str(input('\nAdd another student (Y/N): '))
        if fwd.lower() == 'y':
            while True:
                name = str(input("Enter student's name: "))

                if not name.isalpha():
                    print("Please enter a valid name.")
                    continue
                else:
                    break
            while True:
                grade = float(input("Enter student's grade: "))

                if grade < 0:
                    print("Input grade between 0-100.")
                    continue
                elif grade > 100:
                    print("Input grade between 0-100.")
                    continue
                else:
                    break

            # Write data to file
            grades_file.write(name + ' ' + str(grade) + '\n')


        elif fwd.lower() == 'n':
            grades_file.close()
            file_info()
            exit() # Do we really want to exit here or just break the loop?

        else:
            print("Choose 'Y' or 'N')
3 голосов
/ 25 апреля 2020

Если вы поместите эту строку:

fwd = str(input('\nAdd another student (Y/N): '))

внутри While l oop и удалите continue, это должно работать.

2 голосов
/ 25 апреля 2020

Я думаю, вам следует изменить значение fwd, потому что, если оно не 'y', и вы находитесь внутри него, в то время как True, он не сможет избежать этого самого снова.

1 голос
/ 25 апреля 2020

Вы запрашиваете ввод только один раз, поэтому он знает только это значение. То, что вам нужно сделать, это ввести вход в l oop:

while True:
    fwd = str(input('\nAdd another student (Y/N): '))
    # code

Таким образом, каждый раз, когда он зацикливается, он проверяет, в противном случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...