首页 > 解决方案 > 程序正在识别我给它的每一个输入都是正确的

问题描述

我目前正在主持一个在线寻宝游戏,其中一个步骤涉及“展开”干草捆以找到线索。出于某种原因,每当我测试它时,任何数字都被视为正确。

import random
import time
bale = int(input("Say a number 1-250 to unroll a bale of hay! It will take 45 seconds before you're told if clues are inside of it, so be willing to wait.")
if int(bale) == 63 or 190 or 36 or 106 or 127 or 89 or 84 or 44 or 80 or 124 or 173 or 202 or 224 or 51 or 220:
  print "Wait 45 seconds to unroll the bale."
  time.sleep(15)
  print "30 seconds left..."
  time.sleep(5)
  print "..."
  time.sleep(5)
  print "20 seconds left..."
  time.sleep(10)
  print "10 seconds..."
  time.sleep(5)
  print "5 seconds..."
  time.sleep(1)
  print "4!"
  time.sleep(1)
  print "3!"
  time.sleep(1)
  print "2!"
  time.sleep(1)
  print "1!"
  time.sleep(1)
  print "Yes! There's a clue in here! Send a screenshot of this for confirmation to move on!"
else:
  print "Wait 45 seconds to unroll the bale."
  time.sleep(15)
  print "30 seconds left..."
  time.sleep(5)
  print "..."
  time.sleep(5)
  print "20 seconds left..."
  time.sleep(10)
  print "10 seconds..."
  time.sleep(5)
  print "5 seconds..."
  time.sleep(1)
  print "4!"
  time.sleep(1)
  print "3!"
  time.sleep(1)
  print "2!"
  time.sleep(1)
  print "1!"
  time.sleep(1)
  print "Sorry, no clue. Refresh the page and try again with a new number."

标签: pythonpython-2.7input

解决方案


当您编写or子句时,每个参数都被评估为布尔值。所以实际上你写的内容被解释为:

int(bale) == 63真的吗?还是190真的?还是36真的?等等。

Python 正在将这些整数转换为bool值并评估它们是否为真。请注意,bool(n)对于所有整数 n,除 n = 0 外,它都是假的,因此这导致条件if始终为真。

您要做的是检查是否int(bale)等于任何整数。这可以通过将检查更改为:

if int(bale) == 63 or int(bale) == 190 or int(bale) == 36 or...

一种更易读、更快速的方法是使用一个集合:

if int(bale) in {63, 190, 36, ...}:

推荐阅读