[英]How do I create a user-defined list in Python?
我對python完全陌生,所以請原諒糟糕的安排。
我正在嘗試創建 RPG 的開端,其中玩家選擇要面對的怪物數量,然后為怪物命名。 代碼似乎接受數字輸入,但是當它詢問怪物的名字時,它返回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)
使用列表乘法(使用星號運算符)創建可變對象列表是一個壞主意。 因為您實際上在整個列表中使用了相同的對象。 如果對象是可變的 - 對象的變化會反映在整個列表中。
對於我懷疑的初學者來說,這是一個微妙的觀點,請閱讀此處以獲取更詳細的解釋。 這只有效,因為這些是字符串,它們是不可變的,不能輕易改變。
既然這已經結束了,重要的是要注意您所做的是在整個列表中復制相同的名稱。 您想要做的是為每個怪物創建一個新名稱 - 因此您應該使用多次調用輸入的列表理解。 新的和改進的monsterNames
函數如下所示:
# accept number rof monsters as an argument from 'welcome'
def monsterNames(number):
totalMobs = [input('Monster name ') for _ in range(number)]
return totalMobs
這將通過調用input
指定的次數來創建一個怪物名稱列表。
此外,眾所周知,選擇_
作為變量名意味着它實際上並未在任何地方使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.