Python,列表在退出while循环时清空



我正在写一个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)

最新更新