首页 > 解决方案 > “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),
}

标签: pythondictionaryif-statementrandom

解决方案


问题出在这一行:

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':

推荐阅读