簡體   English   中英

從初始化對象列表中查找類屬性

[英]Finding class attribute from list of initialized objects

我正在完成一項任務,其中涉及使用分支故事情節創建文本冒險。

它是這樣的:

級別1具有1個提示和3個選擇級別2具有3個提示和9個選擇級別3具有9個提示和27個選擇級別4具有27個提示和81個選擇采取的每個選擇都會在下一級別上產生3種不同選擇的新的唯一提示。

我有一個像這樣的基本課程:

class Level:
    def __init__(self,level_num, level_prompt):
        self.level_num = level_num
        self.level_prompt = level_prompt
        self.choices = []

    def add_choices(self, choices, next_branch):
        self.choices.append(choices)
        self.next_branch = next_branch

    def print_situation(self):
        print("Level " + str(self.level_num))
        print(self.level_prompt)
        print("[A] " + self.choices[0])
        print("[B] " + self.choices[1])
        print("[C] " + self.choices[2])

    def get_next_prompt(self, letter_choice): # this will look at choice and find the prompt associated with it, for example level1 choice A SHOULD return level2_A
        if letter_choice == 'A':
            return self.choices[0].next_branch
        if letter_choice == 'B':
            return self.choices[1].next_branch
        if letter_choice == 'C':
            return self.choices[2].next_branch

為了說明程序的流程,這里是初始化對象的示例。

#  prompts
level1 = Level(1, 'PROMPT HERE')

level2_A = Level(2, 'PROMPT HERE')
level2_B = Level(2, 'PROMPT HERE')
level2_C = Level(2, 'PROMPT HERE')

level3_A1 = Level(3, 'PROMPT HERE')
level3_A2 = Level(3, 'PROMPT HERE')
level3_A3 = Level(3, 'PROMPT HERE')
level3_B1 = Level(3, 'PROMPT HERE')
level3_B2 = Level(3, 'PROMPT HERE')
level3_B3 = Level(3, 'PROMPT HERE')
level3_C1 = Level(3, 'PROMPT HERE')
level3_C2 = Level(3, 'PROMPT HERE')
level3_C3 = Level(3, 'PROMPT HERE')

#  choices
level1.add_choices('CHOICE A', level2_A)
level1.add_choices('CHOICE B', level2_B)
level1.add_choices('CHOICE C', level2_C)

level2_A.add_choices('CHOICE A', level3_A1)
level2_A.add_choices('CHOICE B', level3_A2)
level2_A.add_choices('CHOICE C', level3_A3)
level2_B.add_choices('CHOICE A', level3_B1)
level2_B.add_choices('CHOICE B', level3_B2)
level2_B.add_choices('CHOICE C', level3_B3)
level2_C.add_choices('CHOICE A', level3_C1)
level2_C.add_choices('CHOICE B', level3_C2)
level2_C.add_choices('CHOICE C', level3_C3)

我程序中的錯誤來自類的get_next_prompt方法。 我的意圖是能夠這樣稱呼它:

level1.get_next_prompt('A')

並使其返回值:level2_A。 這不僅是在級別名稱的末尾添加_A,而且還應查看選擇項的next_branch參數並將其返回。

讓我知道是否有一些不清楚的事情。

謝謝!

def add_choices(self, choices, next_branch):
        self.choices.append(choices)
        self.next_branch = next_branch

self.choices是一個字符串數組: ['CHOICE A','CHOICE B', 'CHOICE C'] ,沒有任何next_branch屬性。

您沒有將next_branch與每個選擇一起存儲, next_branch將其存儲在基本級別中,並且每次添加新選擇時都將其覆蓋。

我可能會將其更改為:

def add_choices(self, choices, next_branch):
        self.choices.append((choices, next_branch))

那么您選擇的文本位於self.choices[0][0], self.choices[1][0], self.choices[2][0] ,下一個分支存儲在self.choices[0][1], self.choices[1][1], self.choices[2][1]

更好的選擇是更改級別結構,以便將其初始化為:

level1 = Level(1, 'CHOICE TO GET HERE', 'PROMPT HERE')

存儲為

self.choice
self.prompt

那你可以做

def add_choices(self, next_branch):
    self.choices.append(next_branch)

並從以下位置獲取信息:

print self.choices[0].choice

或獲得水平

return self.choices[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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