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
相关产品推荐
相关产品推荐

