【问题标题】:Do something if string is not in variable and do something if string is in variable [duplicate]如果字符串不在变量中,则做某事,如果字符串在变量中,则做某事[重复]
【发布时间】:2022-01-09 20:51:52
【问题描述】:

您好,我正在尝试使用 Python 中的 Deeplearning 构建聊天机器人。 (我很新)而且我想要一些命令,比如如果我将“play something”作为输入,机器人应该播放 YouTube 视频。如果“play”不在输入中,它应该从它的深度学习过程中给出答案。但就我而言,它两者兼而有之。有谁知道如何解决它?因此,如果输入中有一个单词,它应该执行一个命令,但如果不是,它应该用深度学习的响应来回答我。所以我的实际问题是我得到两个输出而不是一个。

代码

def chat():
    print("Start talking with the bot! (type quit to stop)")
    while True:
        inp = input("You: ")
        # Commands
        if inp.lower() == "quit":   
            break
        elif "play" in inp:
            song = inp.replace("play", "")
            talk("Playing" + song)
            print("Playing" + song)
            pywhatkit.playonyt(song)

        results = model.predict([bag_of_words(inp, words)])[0]
        results_index = numpy.argmax(results)
        tag = labels[results_index]

        if ['play', 'quit'] not in inp:   
            # If accuracy is over 75% respond with it. 
            if results[results_index] > 0.75:

                for tg in data["intents"]:
                    if tg['tag'] == tag:
                        responses = tg['responses']

                back = '  ' + random.choice(responses)
                talk(back)
                print(back)
                
            else:
                talk("What are you trying to say?")
                print("What are you trying to say?")

chat()

这不是全部代码,我省略了 Deeplearning 和 TTS 部分。 感谢您的帮助!

【问题讨论】:

    标签: python python-3.x loops if-statement


    【解决方案1】:

    试试这样的:

    # above: lowercase it, AND remove leading/trailing spaces for consistency
    inp = inp.lower().strip()
    
    if inp not in ['play', 'quit']:
        # code ...
    

    这更加明显和可扩展。正如上面提到的其他用户,如果您使用它,但它之前您测试与“退出”的完全匹配和与“播放”的完全匹配,因为这基本上是前面的else。 p>

    【讨论】:

      【解决方案2】:

      如果您有 3 个案例 1) 包含退出,2) 包含播放,3) 其他所有内容,您应该将第 3 部分放在 else 语句中,无需为您已经检查过的内容编写另一个 if 条件。

      如果“play”或“quit”不在 inp 中也不是你想要的条件。

      正如tomservo提到的那样:如果inp不在['play','quit']中:

      【讨论】:

      • 啊,是的,没错,但它仍然给我 2 个输出:命令输出和深度学习输出,这是我的实际问题。
      • 如果你有 3 个案例 1) 包含退出,2) 包含播放,3) 其他所有内容,您应该将第 3 部分放在 else 语句中,无需为您已经编写的内容编写另一个 if 条件检查,希望能解决它。
      • 天哪,我现在明白了,谢谢我之前把它放在 else 语句中,但我不能这样做,因为我在两者之间分配了变量。 ^^" 谢谢!
      • 你从来没有测试过这个,不是吗? if "play" and "quit" not in inp 被解释为if ("play") and ("quit" not in inp:)。由于bool("play") 的计算结果为True,您可以将完整条件减少为if "quit" not in inp:,这显然不是我们想要的。
      • 修复了答案,谢谢 mathias。我检查了一个使用相同的示例,也许我错过了一些东西,请查看上面的答案。
      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      相关资源
      最近更新 更多