我正在写一个D&D 5e字符生成器。使用while循环,我定义了能力分数的生成。掷4个6边骰子,并将最低骰子掷下,如下所示。
import random
abset=list()
def abrl(): #define ability score roll
abnum=0
abset=list()
rollfnl=set()
while abnum<6:
rollstat=random.sample(range(1,7),4)
rollstat.sort(reverse=True)
tempab=(sum(rollstat[:3]))
abset.append(tempab)
print(abset)
abnum+=1
print('Welcome to this chargen!')
print("let's roll ability scores first!")
abrl()
print(abset)
这段时间内的打印是为了解决出现[]的缺勤问题。因此输出如下。
Welcome to this chargen!
let's roll ability scores first!
[13]
[13, 15]
[13, 15, 13]
[13, 15, 13, 13]
[13, 15, 13, 13, 12]
[13, 15, 13, 13, 12, 13]
[]
我想,为什么在退出while循环或abrl函数后,列表会被清空?感谢您的帮助和耐心!
方法内部定义的变量仅存在于该方法内部。你可以把方法想象成黑盒——除了你明确允许输入或输出的东西之外,什么都不输入或输出。
要返回下降,请在方法末尾添加以下行:return abset
。
然后,当您调用该方法时,通过调用abset = abrl()
而不仅仅是abrl()
,将变量重新保存到全局范围
全局变量在函数体中是只读的,除非使用global
关键字。
在这里,您在函数中定义了另一个abset
列表,与全局列表不同。
改为:
import random
abset=list()
def abrl(): #define ability score roll
abnum=0
global abset
rollfnl=set()
while abnum<6:
rollstat=random.sample(range(1,7),4)
rollstat.sort(reverse=True)
tempab=(sum(rollstat[:3]))
abset.append(tempab)
print(abset)
abnum+=1
print('Welcome to this chargen!')
print("let's roll ability scores first!")
abrl()
print(abset)