提问人:The Cuber 提问时间:5/28/2023 更新时间:5/31/2023 访问量:54
我的 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
问:
我的代码旨在根据石头剪刀布规则更新赢、平局和输家,但事实并非如此。
我很困惑,因为打印 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”),永远不会运行。为什么会这样,我该如何解决?
答:
-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=}")
评论