#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)
превращается в кучу благодарностей, которые на самом деле очень помогли!