python - “if”语句不移动到“else”子句
问题描述
我正在为一个小游戏编写一个函数,其中每回合都会填充一个工作列表。工作本身是具有路线、时间和薪酬属性的对象。
我希望该列表总共有 5 个项目,并通过从路线列表和工资等级中进行选择来随机填充。
我有一个 for 循环来迭代 5 次,并且我希望只有在选择了某些两条路线时才将工资等级选择为 5。否则,工资等级将是 1 到 4 之间的随机数。
当我在 IF 子句中将薪酬等级设置为 5 时,即使 IF 的条件不正确,它也永远不会进入 else 子句。我不确定我在这里做错了什么。
for pick in range(5):
job = random.choice(random_routes)
if job == 'Military Base' or 'Raiders':
pay_key = 5
else:
pay_key = random.randint(1, 4)
pay = pay_grades[pay_key]
job_postings.append(Job(job, routes[job], pay))
即使选择的路线不是军事基地或袭击者,打印新 job_postings 列表中的第一个索引属性总是返回 5 级工资数字。
以下是路线和支付词典:
routes = {'Boneyard': 5, 'Brotherhood': 6, 'Cathedral': 6, 'Junktown': 4,
'Military Base': 14, 'Necropolis': 5, 'Raiders': 10, 'Shady Sands': 11}
pay_grades = {
1: random.randrange(200, 401, 50),
2: random.randrange(300, 501, 50),
3: random.randrange(400, 601, 50),
4: random.randrange(500, 701, 50),
5: random.randrange(900, 1600, 50),
}
解决方案
问题出在这一行:
if job == 'Military Base' or 'Raiders':
==
运算符优先于运算符,这or
意味着它的评估结果与,
if (job == 'Military Base') or ('Raiders'):
任何非空字符串的计算结果为真(在 REPL 中比较not ''
和),因此整个条件表达式将始终计算为真。not 'abc'
'Raiders'
你真正想要的是,
if job == 'Military Base' or job == 'Raiders':
推荐阅读
- julia - Julia 中的内核 PCA 实现
- tensorflow - tf.gradients 加载大量 RAM
- javascript - 如何在高图散点图中添加垂直(和水平)线
- tensorflow - 使用 Google Colab 在 Tensorboard 中洗出/米色图像
- ios - 在本机 iOS 应用程序中从 Web 视图进行身份验证?
- docker - 显示容器内的文件
- apache-kafka - 如何更改 Debezium 默认主题命名约定以使其适合融合配置单元表自动生成的策略?
- algorithm - Reed-Solomon 纠错算法与 4 态条码的使用
- docker - Docker 容器中的脚本在使用 CMD 运行时与在交互模式下运行时如何给出不同的结果?
- c - 如何解决 GNU make 产生“循环 main.c”错误