你们许多人可能已经看过和/或编码过,我试图建立一个有限状态机; 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())。