你需要将怪物的数量发送给使用它的函数: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)
以及:
^{pr2}$
您还应该将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)
用列表乘法(使用星运算符)创建可变对象的列表是个坏主意。因为你实际上在整个列表中使用的是同一个对象。如果对象是可变的-对象的更改将反映在整个列表中。在
对于初学者来说,这是一个微妙的问题,请阅读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指定次数创建一个怪物名称列表。在
另外,选择_作为变量名意味着它实际上在任何地方都没有使用。在