You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本RPG中2d6掷骰范围判断的if语句问题排查

2d6遭遇表的if判断失效问题

问题描述

我是编程新手,正在开发一款文本RPG。目前程序能判断是否触发随机遭遇,但无法确定具体遭遇类型。我尝试添加基于2d6的遭遇表,却在使用if语句判断数值范围时遇到问题。提供的代码中,即便d6x2的结果处于指定范围内,对应的遭遇文本也无法打印,我曾尝试将判断条件改为if d6x2 == range(2,5),但仍无效,请问这是为什么?

原代码

import random

Encounter =  5

d20 = random.randint(1,20)
print("your d20 rolled a" , d20)

d6 = random.randint(1,6)
#print("your d6 rolled a" , d6)

d6x2 = d6 + random.randint(1,6)
print("you rolled a", d6x2, "on two d6")

if Encounter >= 5:
    if d20 >= 10:
        print("You have an encounter!")
        if d6x2 == (2,5):
            print("A guard catches you trying to escape!")
        elif d6x2 == (6,8):
            print("Thank goodness, it's just a rat.")
        elif d6x2 == (9,12):
            print("Oh great, another prisoner. I wonder if he wants to join you...")
    elif d20 < 10:
        print("You got lucky and don't have an encounter")
else:
    print("You don't have an encounter")

错误原因

  • 整数与元组直接比较:d6x2 == (2,5)是把单个整数和元组(2,5)做相等判断,两者类型、值完全不匹配,永远不会返回True。
  • 整数与range对象直接比较:d6x2 == range(2,5)同样错误,range(2,5)是生成整数序列的对象,不是单个值,整数和range对象用==比较永远不成立。另外你可能没注意,range(a,b)是左闭右开区间,range(2,5)只包含2、3、4,和你需要的2-5范围不符。

修正后的代码

import random

Encounter =  5

d20 = random.randint(1,20)
print("your d20 rolled a" , d20)

d6 = random.randint(1,6)
#print("your d6 rolled a" , d6)

d6x2 = d6 + random.randint(1,6)
print("you rolled a", d6x2, "on two d6")

if Encounter >= 5:
    if d20 >= 10:
        print("You have an encounter!")
        # 直观的区间比较写法
        if 2 <= d6x2 <= 5:
            print("A guard catches you trying to escape!")
        elif 6 <= d6x2 <= 8:
            print("Thank goodness, it's just a rat.")
        elif 9 <= d6x2 <= 12:
            print("Oh great, another prisoner. I wonder if he wants to join you...")
    elif d20 < 10:
        print("You got lucky and don't have an encounter")
else:
    print("You don't have an encounter")

可选写法(用range判断)

如果想用range,要注意左闭右开的特性,调整区间终点:

# 替换原遭遇判断部分
if d6x2 in range(2, 6):  # range(2,6)包含2、3、4、5
    print("A guard catches you trying to escape!")
elif d6x2 in range(6, 9):  # 包含6、7、8
    print("Thank goodness, it's just a rat.")
elif d6x2 in range(9, 13): # 包含9-12
    print("Oh great, another prisoner. I wonder if he wants to join you...")

内容的提问来源于stack exchange,提问作者Wesdog14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:35:37