我的 Python 3.9.13“if-statement”中的代码没有被运行,即使条件似乎为真

The code inside my Python 3.9.13 "if-statement" is not being ran, even though the condition seems to be true

提问人:The Cuber 提问时间:5/28/2023 更新时间:5/31/2023 访问量:54

问:

我的代码旨在根据石头剪刀布规则更新赢、平局和输家,但事实并非如此。

我很困惑,因为打印 CLASS 会给出输出“s”,但将 CLASS 与“s”进行比较会返回 False。 省略了一些代码,省略的代码不引用胜利、失败、平局、CLASS 或class_name

法典:

data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
wins = 0
losses = 0
ties = 0
while True:
    save_webcam_image()
    image = Image.open(file_path).convert("RGB")
    size = (224, 224)
    image = ImageOps.fit(image, size, Image.Resampling.LANCZOS)
    image_array = np.asarray(image)
    normalized_image_array = (image_array.astype(np.float32) / 127.5) - 1
    data[0] = normalized_image_array
    prediction = model.predict(data, verbose=0)
    index = np.argmax(prediction)
    class_name = class_names[index]
    confidence_score = prediction[0][index]

    CLASS = str(class_name[2:])
    botChoice = random.choice(['rock', 'paper', 'scissors'])
    print("You choose:",CLASS)
    print("I choose:",botChoice)

    if CLASS == "r":
        print("rock registered")

        if botChoice == "rock":
            ties += 1
        elif botChoice == "paper":
            losses += 1
        else:
            wins +=1

    elif CLASS == "p":
        print("paper registered")

        if botChoice == "paper":
            ties += 1
        elif botChoice == "scissors":
            losses += 1
        else:
            wins +=1

    elif CLASS == "s":
        print("scissors registered")
        if botChoice == "scissors":
            ties += 1
        elif botChoice == "rock":
            losses += 1
        else:
            wins +=1

            

    print("\nCurrent Score: "+str(wins)+" / " + str(ties) + " / " + str(losses) + "\n\n")

输出:

You choose: s

I choose: paper

Current Score: 0 / 0 / 0

我以为,由于print(CLASS)打印“s”,CLASS ==“s”应该是真的,但事实并非如此。只运行最底层的打印语句,无论什么类,都不会打印“石头/纸/剪刀注册”。问题不仅仅是当 CLASS == “s” 时。当它是“p”或“r”时,指示分数是否已更新的 print 语句:print(“rock/paper/scissors registered”),永远不会运行。为什么会这样,我该如何解决?

python if-statement 变量

评论


答:

-1赞 pabloabur 5/28/2023 #1

我无法重现您的错误,因为缺少某些对象。但是你确定你的字符串中没有空格吗? 与 或 不同。你可以用它来。's''s '' s'str.strip

评论

0赞 The Cuber 5/28/2023
我仍然对原因感到困惑,但是在 CLASS 中的“s”之后有一个新的行字符,我在发布此:(后大约 30 秒注意到了它 |非常感谢您的反馈:)
0赞 pabloabur 5/28/2023
是的,没关系,:)稍微处理一下字符串通常是个好主意,尤其是当它们来自其他复杂对象时。否则,您最终可能会得到不需要的东西,例如换行符
2赞 slothrop 5/28/2023
当您从文本文件中读取数据时,通常会发生这种情况。例如,in python 的结果包括每行末尾的 。readlines()\n
0赞 pyjedy 5/28/2023 #2

停止思考愚蠢的想法,尝试打印意想不到的 CLASS 值

if CLASS == "r":
    print("rock registered")
elif CLASS == "p":
    print("paper registered")
elif CLASS == "s":
    print("scissors registered")
else:
    print(f"unexpected {CLASS=}")