尝试在 Python 中为 DnD 制作 4D6 滴低位骰子滚子,但无法从列表或输出到 main() 函数中删除所选值



我正在努力提高我的编码技能,所以我认为在nd中制作一个角色状态创建者会很有趣。我创建了一个main()函数,该函数创建一个包含可能的统计数据(STR, DEX等)的字典,将初始值设置为0,然后根据用户输入(3d6, 4d6)将字典传递给不同的函数。此时,程序只是遍历字典,并在滚动时赋值。

这是目前为止的代码
#!/usr/bin/env python3
# c_stats2.py
import random
import math
# 4d6 drop lowest
def m4d6(x):
for stat in x:
rolls = []
for roll in range(4):
r = random.randint(1,6)
rolls.append(r)
# Drop lowest number
del rolls[rolls.index(min(rolls))]
x[stat] += sum(rolls)
return x
# 3d6 drop lowest
def m3d6(x):
for stat in x:
rolls = []
for roll in range(3):
r = random.randint(1,6)
rolls.append(r)
x[stat] += sum(rolls)
return x
def main():
method = input("Select stat method: ")
stats = {'STR': 0,
'DEX': 0,
'CON': 0,
'INT': 0,
'WIS': 0,
'CHA': 0
}
while True:
if method == '4d6' or method == '4D6':
stats = m4d6(stats)
break
elif method == '3d6' or method == '3D6':
stats = m3d6(stats)
break
else:
method = input('Please enter a valid method: ')
continue
for stat in stats:
print(stat, ':' ,stats[stat], 'tBonus:' , math.floor((int(stats[stat]) - 10)/2))
print("Initiative:", math.floor((int(stats['DEX']) - 10)/2))
main()

我想添加一个选项,允许用户实际选择统计数据的去向。我的想法是,我将创建一个滚动值列表,将它们分配给字典中的一个状态,然后从滚动值列表中删除该值,并将字典返回给新值。下面是到目前为止的代码:

# 4d6 drop lowest, choose stats
def m4d6c(x):
val = [] 
for dice in range(6):
rolls = []
for roll in range(4):
r = random.randint(1,6)
rolls.append(r)
del rolls[rolls.index(min(rolls))]
dice += sum(rolls)
val.append(dice)
for stat in x:
print(val)
print(str("Insert value for {}.").format(stat))
dic = input('Value: ')
if dic in val:
x[stat] += dic
val.remove(dic)
continue
else:
print("Please enter a valid value")
continue
return x

问题是这些值没有被分配给统计数据,也没有从val列表中删除。谁能告诉我,我哪里做错了?

看起来你很接近,但是你忘记了input返回一个字符串,而在m4d6c中,你需要一个int来让你的逻辑工作。

当前:

dic = input('Value: ')

需要:

dic = int(input('Value: '))

相关内容

最新更新