-2

我是 Python 编程的初学者。最近我决定构建一个音频助手(基本上是一个带音频的聊天机器人),但是在尝试生成输出时遇到了一个问题。我编写代码的方式是,如果用户说/要求机器人做什么,是没有为机器人定义的事情,或者如果给出了特定参数,它没有任何关于做什么的命令,那么它应该给出具体的输出。它的代码如下:

# to take input from the user:
command = input("Whatever you want to say: ")
command = command.lower()
cmd = command.split()

# below are the commands to give output after processing the input
if 'hi' in cmd:
  print('hey')
elif (('how')and('are'))and('you') in cmd:
  print('All good! Wbu?')
elif (('hi')and('hru')) in cmd:
  print('Hey! Everyting is fine! Wbu?')
else:
  print('sorry, did not understand what you meant!')

上面代码的问题在于,如果用户说:(嗨,hru?)程序只会说:嘿。这是因为我在程序中使用了 elif 语句。所以我决定将它们全部更改为 if 语句:

if 'hi' in cmd:
  print('hey')
if (('how')and('are'))and('you') in cmd:
  print('All good! Wbu?')
if (('hi')and('hru')) in cmd:
  print('Hey! Everyting is fine! Wbu?')
else:
  print('sorry, did not understand what you meant!')

它的作用是,它可以很好地打印输出,但是如果应该给出任何其他语句的输出,它会给出该语句,但也会给出 else 的输出。

然后我尝试为输出定义一个函数,如果它为真,即如果用户所说的有指定的输出,那么它应该给出输出,如果没有,那么程序应该打印异常。

def commands():
  if 'hi' in cmd:
    print('hey')
  if (('how')and('are'))and('you') in cmd:
    print('All good! Wbu?')
  if (('hi')and('hru')) in cmd:
    print('Hey! Everyting is fine! Wbu?')

if commands()==True:
  commands()
else:
  print('sorry, did not understand what you meant!')

这也是第一个,打印语句以及异常。我该如何解决这个问题?

4

1 回答 1

0

尽管在英语(和其他人类语言)中很常见这样的说法:

如果 X 和 Y 在 Z...

…这不是布尔逻辑的工作原理。

您实际编写的内容更像是这样解析的:

如果 X 和 Y 在Z ...

类似的东西('hi' and 'hru')会给你一个无用的结果('hru'我认为)。

你需要的是:

如果 X 在 Z 中,并且 Y 在 Z 中

为此,请像这样重写您的条件:

if ('hi' in cmd) and ('hru' in cmd):
于 2020-03-20T13:18:59.053 回答