Проблемы с использованием оператора if и добавления в Python

#python

#питон

Вопрос:

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

Вот мой код:

 people = []
working = False
seatNum = input("How many seats do you need: ")
while (not seatNum.isnumeric()):
  print("Invalid")
  seatNum = input("How many seats do you need: ")
print("Mince pie = 1, Chocolate coins = 2, Apple pie = 3")
seatNum = int(seatNum)
for i in range(seatNum):
  Nam = input("Enter name: ")
  people.append(Nam)
  choice = input("Enter your choice: ")
  while (working == False):
    while (not choice.isnumeric()):
      print("Invalid")
      choice = input("Enter your choice: ")
    choice = int(choice)

    if choice == 1 or choice == 2 or choice == 3:
      working = True
    else:
      print("Enter number between 1-3")
      choice = input("Enter your choice: ")

  if choice == 1:
    people.append("Mince Pie")
  elif choice == 2:
    people.append("Chocolate coins")
  elif choice == 3:
    people.append("Apple pie")
print(people)
 

Это мой код очень грязный, но он еще не закончен. вот результат:

 How many seats do you need: 3
Mince pie = 1, Chocolate coins = 2, Apple pie = 3
Enter name: a
Enter your choice: 1
Enter name: b
Enter your choice: 2
Enter name: c
Enter your choice: 3
['a', 'Mince Pie', 'b', 'c']
 

и вот желаемый результат:

 How many seats do you need: 3
Mince pie = 1, Chocolate coins = 2, Apple pie = 3
Enter name: a
Enter your choice: 1
Enter name: b
Enter your choice: 2
Enter name: c
Enter your choice: 3
['a', 'Mince Pie', 'b',  'Chocolate coins', 'c', 'Apple pie']
 

Любая помощь приветствуется. Заранее спасибо

Талия.

Комментарии:

1. Вы знаете, что такое функция ? Посмотрите, можете ли вы создать тот, который представляет меню в целом, а затем использовать его для каждого выбора меню, который вы хотите, чтобы пользователь сделал.

2. Вместо того чтобы использовать working переменную, используйте while True: , а затем используйте break , когда вы хотите выйти из цикла.

3. Кроме того, я думаю, что, скорее всего, вы хотите иметь список кортежей или, может быть, словарь в качестве структуры ваших данных. Поскольку вы, похоже, хотите записать сопоставление от пользователя к продукту. В списке, содержащем оба, отсутствует семантика.

4. я знаю, что такое функции, но на данный момент я не уверен в их реализации. Это то, что я планирую изучать дальше. `While True:` отлично работает, спасибо за предложение.

Ответ №1:

 while (working == False):
 

Этот while цикл не будет выполняться для гостей после первого, потому working что был установлен на True это время и не сбрасывается.

 choice = int(choice)
 

Эта часть выполняется только внутри while цикла, поэтому она никогда не выполняется для гостей после первой.

 if choice == 1:
 

Поскольку choice это все еще строка, эти сравнения всегда завершаются неудачей.

Ответ №2:

После запуска цикла «While (working == False)». Вы устанавливаете working = True внутри цикла. В следующий раз, когда цикл выполняется для следующего пользователя, значение working по-прежнему равно True. Таким образом, цикл не будет выполняться. Попробуйте этот частичный код:

 #Add your original code
for i in range(seatNum):
Nam = input("Enter name: ")
people.append(Nam)
choice = input("Enter your choice: ")
working = False #This statement is what I added
while (working == False):
  while (not choice.isnumeric()):
    print("Invalid")
    choice = input("Enter your choice: ")
  choice = int(choice)
  #Continue your code normally
 

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

Ответ №3:

 if choice == 1 or choice == 2 or choice == 3:
    working = True
 

Это то, что вызывало проблему. Как только программа увидела, что choice равно одному из этих чисел, она изменила значение working на True и перестала добавлять choice.

 people = []
seatNum = input("How many seats do you need: ")


while seatNum.isnumeric() == False:
  print("Invalid")
  seatNum = input("How many seats do you need: ")
seatNum = int(seatNum)

print("Mince pie = 1, Chocolate coins = 2, Apple pie = 3")

while seatNum*2 != len(people):
    Nam = input('Enter Name: ')
    people.append(Nam)
    
    choice = input('What is your choice: ')
    while choice.isnumeric() == False:
        print('Invalid')
        choice = input('What is your choice: ')
    
    choice = int(choice)
    
    if choice == 1:
        people.append("Mince Pie")
    elif choice == 2:
        people.append("Chocolate coins")
    elif choice == 3:
        people.append("Apple pie")
        
print(people)
 

Я убрал рабочую переменную, чтобы логика вашего кода работала лучше. Логика цикла while выполняется до тех пор, пока len (people) не станет двойным числом мест, поскольку каждый получает один выбор пустыни.