为FSM循环功能

时间:2017-10-09 20:22:41

标签: python function fsm

你们许多人可能已经看过和/或编码过,我试图建立一个有限状态机; 5个州和9个过渡,以确定是否有人在笑。我并不想要整个答案,因为我想尽可能多地弄清楚自己。然而,教授和TA在回答时并不总是非常快速或有帮助,而且无论如何这个地方更有用。

我只想输入" ha"或" ho"直到"!"进入,说"你笑了。"任何其他角色都将结束它。有3个功能要做; get_ch(),find_state()和main(),它们驱动其他两个。这就是我所拥有的:

def get_ch():  # prompt for the input in a loop
    ch = input("Enter a character or press the Return key to finish: ")
    if len(ch) > 1: 
        print("Invalid input, please try again.")
    else:
        return ch

def find_state(state, ch):
    if state==1:
        if ch=="h" or ch=="H":
            state=2
            return state
        else:
            state=5
            return state
    if state==2:
        if ch=="a" or ch=="A" or ch=="o" or ch=="O":
            state=3
            return state
        else:
            state=5
            return state
    if state==3:
        if ch=="!":
            state=4
            return state
        if ch=="h" or ch=="H":
            state=2
            return state
        else:
            state=5
            return state

def main():
    print("I can recognize if you are laughing or not.")
    print("Please enter one character at a time.")

    # initialize the variables, for example:
    ch=get_ch()
    string=""
    state=1

    #call the functions in a loop

    while get_ch():
        if len(ch)<1:
            print("\nYou entered", string)
            print("You are laughing.")
            print("You are not laughing.")
        else:
            if state<4:
               find_state(state,ch)
               string+=ch
               continue
            if state==4:
                  print("\nYou entered", string)
                  print("You are laughing.")
            else:
                  print("\nYou entered", string)
                  print("You are not laughing.")
main()

我遇到的问题是,这些功能并不是在谈论&#34;对彼此。我不知道这是因为它们没有在main()中正确循环,或者问题是在各个函数本身内(例如在find_state()中回调get_ch())。

0 个答案:

没有答案