【发布时间】:2020-10-11 20:33:35
【问题描述】:
这是一个 Python 游戏的基本战利品表。
- 如果投掷在任何数字上滚动到 13(包括 13),则很常见
- 如果掉落从 14 到 18 并在 18 上滚动,则不常见
- 如果掉落在 19 或 20,则稀有
即使满足条件,程序也会忽略稀有掉落表,而是从罕见掉落表中取出物品,例如 drop = 20 1000 金币
有人能解释一下这里的问题吗?
import random
player_won = True
def common():
common_drop= ['Dragon Bones','Dragon Hide','Dragon Teath','Steel Scimitar','Iron Arrows','Bronze Kitesheild']
print(random.choice(common_drop))
def uncommon():
uncommon_drop= ['Rune Platebody','1000 Gold Coins','Dragonstone','Rune longsword','Mithril Javelin','Rune Med Helm']
print(random.choice(uncommon_drop))
def rare():
rare_drop= ['Dragon Head','Gold Trimmed Rune Full Helm','Crystal Halberd','Diamond (uncut)']
print(random.choice(rare_drop))
while player_won == True:
drop = random.randint(1,20)
print(drop)
if drop <= 13:
common()
elif drop > 13 <= 18:
uncommon()
elif drop == 19 or 20:
rare()
break
【问题讨论】:
-
这是因为您的第二个
elif条件 - 13 始终小于或等于 18。 -
tl;dr
13 < drop <= 18和drop in {19, 20} -
drop > 13 <= 18是True <= 18(因为如果drop <= 13为真,我们就不会在elif部分)又名1 <= 18,因此uncommon()总是被执行(除非drop <= 13) 和rare()永远不会被执行。
标签: python python-3.x function while-loop