从初始化对象列表中查找类属性

2024-04-19 11:18:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个作业,包括用分支故事线创造一个文本冒险

工作原理如下:

级别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\u next\u prompt方法。我的意图是能够这样称呼它:

level1.get_next_prompt('A')

并让它返回值:level2\u A。这并不是简单地在级别名称的末尾添加一个,而是应该查看选项的下一个分支参数并返回该参数

如果有什么不太清楚,请告诉我

谢谢


Tags: selfaddbranchherelevelpromptnextchoices
1条回答
网友
1楼 · 发布于 2024-04-19 11:18:09
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,而是存储在基本级别,每次添加新选项时都会覆盖它

我可能会改成:

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]

相关问题 更多 >