gpt4 book ai didi

python - 如何在 Python 中创建用户定义的列表?

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:39 27 4
gpt4 key购买 nike

我是 python 的新手,所以请原谅糟糕的安排。

我正在尝试创建角色扮演游戏的开头部分,玩家可以在其中选择要面对的怪物数量,然后为怪物命名。代码似乎接受数字输入,但当它询问怪物的名字时,它返回 NameError: name 'number' is not defined.

def welcome():    
number = monsters()
print('Alright, ' + str(number) + ' monsters.')
print('So, what are the names of these beasties?')
mNames = monsterNames()

def monsters():
number = input('How many monsters will you face? ')
return number

def monsterNames():
totalMobs = [[input('Monster name ')]] * number
return totalMobs

def main():
welcome()

main()

是什么导致了这个错误,我该如何尝试解决它?

最佳答案

您需要将怪物的数量发送给使用它的函数:

def welcome():
number = monsters()
print('Alright, ' + str(number) + ' monsters.')
print('So, what are the names of these beasties?')
# send number of monsters to 'monsterNames'
mNames = monsterNames(number)

和:

# accept number rof monsters as an argument from 'welcome'
def monsterNames(number):
totalMobs = [input('Monster name ')] * number
return totalMobs

您还应该将 number 转换为 @BhargavRao 提到的整数:

def monsters():
number = input('How many monsters will you face? ')
return int(number) # this can fail, use try-catch optimally

请注意,我也更改了(在评论提到它之后):

[[input('Monster name ')]] * number # creates nested lists (mutable)

收件人:

[input('Monster name ')] * number # creates list of strings (immutable)

使用列表乘法(使用星号运算符)创建可变对象列表不是一个好主意。因为您实际上在整个列表中使用相同的对象。如果对象是可变的 - 对象的变化会反射(reflect)在整个列表中。

我怀疑这对初学者来说是一个微妙的问题,请阅读 here以获得更详细的解释。这仅适用于这些是不可变且不易更改的字符串。

现在这已经结束了,重要的是要注意您正在做的是在整个列表中复制相同的名称。您想要做的是为每个怪物创建一个新名称 - 因此您应该使用需要多次输入的列表理解。新的和改进的 monsterNames 函数如下所示:

# accept number rof monsters as an argument from 'welcome'
def monsterNames(number):
totalMobs = [input('Monster name ') for _ in range(number)]
return totalMobs

这将通过调用 input 指定次数来创建一个怪物名称列表。

此外,众所周知,选择 _ 作为变量名意味着它实际上并未在任何地方使用。

关于python - 如何在 Python 中创建用户定义的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com