简体   繁体   English

if 语句,来回

[英]if statement, going back and forth

i am new to python, but have programmed some structured text, and a tiny bit c++ now i am working on a problem using if statements and it doesnt seem to work the way i am used to我是 python 的新手,但是已经编写了一些结构化文本和一点点 c++ 现在我正在使用 if 语句解决一个问题,它似乎不像我习惯的那样工作

example code:示例代码:

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

ive tried making sure its an integer and so on, just keep getting stuck on done?我试过确保它是一个 integer 等等,只是一直卡在完成? 1 for yes 2 for no, it always loop me back to type in guest 1 表示是 2 表示否,它总是让我循环输入客人

while using structured text i often used this way of going back and forth, but i cant seem to understand it in python, maybe i should rather use case/switch?在使用结构化文本时,我经常使用这种来回的方式,但我似乎无法在 python 中理解它,也许我应该使用 case/switch? anyways if anyone could help me understand if you can use the IF statement this way in python is highly appreciated无论如何,如果有人可以帮助我理解您是否可以在 python 中以这种方式使用 IF 语句,我们将不胜感激

I think you wrote wrong operator.我认为你写错了运算符。 ferdig == 1 just comparing value operator. ferdig == 1 只是比较值运算符。 So it's return true(1) or false(0).所以它返回 true(1) 或 false(0)。

if you wnat to change the ferdig's value you should write ferdig = 3 in if statement.如果你想改变 ferdig 的值,你应该在 if 语句中写 ferdig = 3。

I've cleaned up your code a bit to get what I think you want.我已经清理了你的代码以获得我认为你想要的东西。

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")
        

Your code has a bunch of issues, here those have been fixed:您的代码有很多问题,这里已经修复:

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

Note that most of your code isn't really needed though, you're doing a lot of book-keeping that Python can do for you, or that's just not needed:请注意,您的大部分代码并不是真正需要的,您正在做很多 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

So, that's just:所以,这只是:

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)

In the end, this would do the same:最后,这将做同样的事情:

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

Here is another option to accomplish what you are trying to do using functions.这是使用函数完成您尝试执行的操作的另一种选择。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM