утверждение if, переход туда и обратно

#python #if-statement #switch-statement

Вопрос:

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

пример кода:

 more_guests = 0 loop = bool; loop = False ferdig = int; ferdig = 1 while loop == False:  guests = []  more_guests = 0  if int(ferdig) == 1:  guest = input("type in guest ")  more_guests = int(input("done? 1 for yes 2 for no "))  if int(more_guests) == 1:  guests.append(guest)  ferdig == 3  elif int(more_guests) == 2:  guests.append(guest)  ferdig == 2  else:  print("unvalid answer, please use 1 or 2")  ferdig == 1  elif int(ferdig) == 2:  ferdig = 1  elif int(ferdig) == 3:  print(guests)  else:  loop = True  

я пытался убедиться, что это целое число и так далее, просто продолжаю зацикливаться на сделанном? 1 для » да «2 для «нет», он всегда возвращает меня, чтобы ввести «гость»

при использовании структурированного текста я часто использовал этот способ перемещения туда и обратно, но, похоже, я не могу понять его в python, может быть, мне лучше использовать регистр/переключатель? в любом случае, если кто-нибудь может помочь мне понять, можете ли вы использовать оператор IF таким образом в python, мы высоко ценим

Ответ №1:

Вот еще один вариант выполнения того, что вы пытаетесь сделать, используя функции.

 guests = []  def add_guest():   guest = input("type in guest ")  guests.append(guest)  add_more()  def add_more():   more_guests = int(input("done? 1 for yes 2 for no "))    #if they answer 1 we print out the final list  if more_guests == 1:   print("the guest list is {}".format(guests))  print('have a nice day')    #if they answer 2 we go to the add_guest function   elif more_guests == 2:   add_guest()   #if they answer anything other than 1 or 2 we re-call the add_more function.   else:   print("unvalid answer, please use 1 or 2")   add_more()  add_guest()  

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

1. интересно, каковы преимущества использования функций для этого в цикле?

2. Лично я стараюсь избегать циклов While, потому что они могут привести к бесконечным циклам, если вы не будете осторожны. Я также обычно нахожу функции более удобными для чтения и обдумывания. Но на самом деле все зависит от вас и от того, что вы предпочитаете.

Ответ №2:

Я думаю, вы написали не того оператора. ferdig == 1 просто оператор сравнения значений. Таким образом, это возвращает true(1) или false(0).

если вы хотите изменить значение ferdig, вам следует написать ferdig = 3 в операторе if.

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

1. Ха-ха, это моя вина, спасибо, чувак!

Ответ №3:

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

 guests = [] while True:  guest = input("type in guest ")  guests.append(guest)  response = int(input("done? 1 for yes 2 for no "))  if response == 1:  print(guests)  break  elif response == 2:  continue  elif response == 3:  print(guests)  else:  print("invalid answer, please use 1 or 2")    

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

1. Да, спасибо, быстро заметил, что это был горячий беспорядок, нужно делать это по 1 штуке за раз, чтобы просто сосредоточиться на работе 😉 большое спасибо!

Ответ №4:

В вашем коде есть куча проблем, здесь они были исправлены:

 more_guests = 0 # you don't need to declare types, but if you want to, this is how loop: bool = False # however, Python can just infer the type itself like this ferdig = 1 # you don't want to reset guests every time around the loop guests = [] while loop == False:  more_guests = 0  if int(ferdig) == 1:  guest = input("type in guest ")  # you always want to append a guest, including if someone types a 1 after  guests.append(guest)  more_guests = int(input("done? 1 for yes 2 for no "))  if int(more_guests) == 1:  ferdig = 3  elif int(more_guests) == 2:  ferdig = 2  else:  print("invalid answer, please use 1 or 2")  ferdig = 1  elif int(ferdig) == 2:  ferdig = 1  elif int(ferdig) == 3:  # after printing, you're done, you don't want to print forever  print(guests)  loop = True  

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

 # this isn't needed, because you set that at the start of the loop anyway # more_guests = 0 # this isn't needed, because you can tell when to stop from ferdig # loop: bool = False # starting at 2, since that means you want to keep going ferdig = 2 guests = [] while ferdig != 1:  # this isn't needed, you can just read ferdig  # more_guests = 0  # this isn't needed, you want a new guest on every loop  #if int(ferdig) == 1:  guest = input("type in guest ")  guests.append(guest)  ferdig = int(input("done? 1 for yes 2 for no "))  # none of this is needed, all you need to know is if ferdig is 1 or 2  # if int(more_guests) == 1:  # ferdig = 3  # elif int(more_guests) == 2:  # ferdig = 2  # else:  if ferdig not in (1, 2):  print("invalid answer, please use 1 or 2")  ferdig = 1  # this is also not needed, at this point ferdig will be 1 or 2  # elif int(ferdig) == 2:  # ferdig = 1  # elif int(ferdig) == 3: # put the print outside the loop and it only prints once print(guests) # got rid of this # loop = True  

Так что, это просто:

 ferdig = 2 guests = [] while ferdig != 1:  guest = input("type in guest ")  guests.append(guest)  ferdig = int(input("done? 1 for yes 2 for no "))  if ferdig not in (1, 2):  print("invalid answer, please use 1 or 2")  ferdig = 1 print(guests)  

В конце концов, это сделало бы то же самое:

 more_guests = True guests = [] while more_guests:  guests.append(input("type in guest "))  more_guests = input("done? 1 for yes") != '1' print(guests)  

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

1. Спасибо, заметил это быстро, когда я продолжил, но очистил свой, чтобы он работал, хотя и не так здорово, как здесь! Просто пытаюсь продвигаться вперед, так как я еще не так хорошо знаком с python, и прошло некоторое время с тех пор, как я вообще программировал, но большое спасибо за этот замечательный пример и объяснение!

2. мне любопытно узнать об этой строке, хотя more_guests = input("done? 1 for yes") != '1' почему она останавливается, когда вы вводите 1, когда цикл выполняется на more_guests = True, я не видел, чтобы она использовалась раньше, так что просто немного напрягаюсь

3. Все в порядке, это немного глупо. input("done? 1 for yes") просто получает входные данные в виде строки. x != '1' это выражение, которое True «если x нет '1' «и False » в противном != случае «означает» не равно». Итак, more_guests = input("done? 1 for yes") != '1' средства more_guests должны быть True , если какой-то текст, введенный пользователем в этом приглашении, отсутствует '1' , что именно то, что вам нужно: введите «1», more_guests будет False , в противном случае это будет True .

4. Я полагаю, что в целом может быть очень запутанным что — то вроде этого: x = y == 2 — единственный знак равенства-это назначение, поэтому Python читает это как x = (y == 2) в некотором смысле. И двойной знак равенства-это сравнение, которое приведет к логическому значению True или False , в зависимости от того, имеют ли обе стороны одинаковое значение (или, однако, равенство определено для сравниваемого типа). Так что все получается x = True или x = False .

5. да, хорошо, я знал, что они сами по себе просто не видели всей картины, когда ее собрали вместе, так что, если я правильно понимаю, все получается так, что, когда вы набираете 1, это становится more_guests = (1 != 1) тем, что more_guests = (False) превращается в кучу благодарностей, которые на самом деле очень помогли!