Словарь Python получал мой неверный ввод в словаре

Почему мой словарь принимал значение, когда я вводил действительный ключ и недопустимое значение, сначала я видел, что это была ошибка, но когда я заканчивал программу, когда моя программа отображала словарь, значение ошибки сначала тоже было напечатано, как я могу это исправить ? можно ли это сделать в цикле while? так что я собираюсь делать?

students = {}

count = 1
while count<=3:
    studNum=input("Enter student number " + str(count) + " : ")
    studFname=input("Enter first name " + str(count) + " : ")
    if studNum=='' or studFname=='':
        print("Invalid Please input a valid data, try again....")
        count-=1
        pass
    elif studNum in students.keys():
        print("That student number is already used, try again...")
        count-=1
    count = count+1
    students[studNum] = studFname
    if count==4:
        print("\nStudent List:")
        for x,y in students.items():
            print(x,y)
            pass
        enter=input("\nPlease hit ENTER to delete the 3rd entry")
        if enter=='':
            print("Processing...\n")
            del students[studNum]
            print("3rd entry has been deleted!\n")
            count-=1
            while count<=3:
                studNum1=input("Enter student number " + str(count) + " : ")
                studFname1=input("Enter first name " + str(count) + " : ")
                if studNum1=='' or studFname1=='':
                    print("Invalid Please Try again....")
                    count-=1
                    pass
                elif studNum1 in students.keys():
                    print("That student number is already used, try again...")
                    count-=1
                count = count+1
            students[studNum1] = studFname1
            print("\nStudent List:")
            for x,y in students.items():
                print(x,y)
                pass
            pass
        else:
            print("Invalid Please Try again....")
    pass

Выход:

Enter student number 1 : 123
Enter first name 1 :
Invalid Please input a valid data, try again....
Enter student number 1 : 123
Enter first name 1 : a
That student number is already used, try again...
Enter student number 1 : 1234
Enter first name 1 : a
Enter student number 2 : 12345
Enter first name 2 : b
Enter student number 3 : 123456
Enter first name 3 : c

Student List:
123 a
1234 a
12345 b
123456 c

Ожидаемый результат:

Enter student number 1 : 123
Enter first name 1 :
Invalid Please input a valid data, try again....
Enter student number 1 : 123
Enter first name 1 : a
Enter student number 2 : 1234
Enter first name 2 : b
Enter student number 3 : 12345
Enter first name 3 : c

Student List:
123 a
1234 b
12345 c
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
217
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Все, что вам нужно сделать, это пропустить текущий шаг в цикле, если вы не хотите вставлять «плохие» значения:

if studNum == '' or studFname == '':
    print("Invalid Please input a valid data, try again....")
    continue
elif studNum in students.keys():
    print("That student number is already used, try again...")
    continue

Вы не пропустили строку students[studNum] = studFname, поэтому вставка.

В этом случае вы не хотите уменьшать счетчик, потому что вы вообще не добавляете к нему.

p.s: Про пасс читайте здесь: как использовать пасс-оператор

Вы можете проверить, работает ли эта логика для вас

students = {}
count = 1
while count<=3:    
    studNum=input("Enter student number " + str(count) + " : ")    
    studFname=input("Enter first name " + str(count) + " : ")    
    if (studNum=='' or studFname=='') or (studNum in students.keys()):    
        while(studNum=='' or studFname=='') or (studNum in students.keys()):   
            print("Invalid Please input a valid data, try again....")    
            studNum=input("Enter student number " + str(count) + " : ")    
            studFname=input("Enter first name " + str(count) + " : ")    
            if (studNum=='' or studFname=='') or (studNum in students.keys()):    
                pass    
            else: 
                students[studNum] = studFname    
                break
        count = count+1
    else:
        students[studNum] = studFname
        count = count+1
    if count==4:
        print("\nStudent List:")
        for x,y in students.items():
            print(x,y)
            pass
        enter=input("\nPlease hit ENTER to delete the 3rd entry")
        if enter=='':
            print("Processing...\n")
            del students[studNum]
            print("3rd entry has been deleted!\n")
            count-=1
            while count<=3:
                studNum1=input("Enter student number " + str(count) + " : ")
                studFname1=input("Enter first name " + str(count) + " : ")
                if studNum1=='' or studFname1=='':
                    print("Invalid Please Try again....")
                    count-=1
                    pass
                elif studNum1 in students.keys():
                    print("That student number is already used, try again...")
                    count-=1
                count = count+1
            students[studNum1] = studFname1
            print("\nStudent List:")
            for x,y in students.items():
                print(x,y)
                pass
            pass
        else:
            print("Invalid Please Try again....")
    pass

Другие вопросы по теме