Почему мой словарь принимал значение, когда я вводил действительный ключ и недопустимое значение, сначала я видел, что это была ошибка, но когда я заканчивал программу, когда моя программа отображала словарь, значение ошибки сначала тоже было напечатано, как я могу это исправить ? можно ли это сделать в цикле 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
Все, что вам нужно сделать, это пропустить текущий шаг в цикле, если вы не хотите вставлять «плохие» значения:
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