簡體   English   中英

如何在 Python 中創建用戶定義的列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM