到底什么是修复此代码的最佳方法,这样它就不会产生语法错误?

2024-04-29 07:44:05 发布

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

我似乎找不出这个(不是那么少)for语句有什么错,它会导致语法错误。为了清楚起见,这是用python3.4编写的。如果您想看看前面的一些代码,我很乐意提供一些,但据我所知,这不会引起任何问题。下面是for语句;最后一行是这样的,我可以确定最后一切都是有意义的。你知道吗

编辑:代码现在已正确缩进(很抱歉)。每个“(dict(item))”语句都要引用在第3行创建的字典(根据playerList中的哪个项被寻址,字典的标题会有所不同)。有没有一种方法可以叫那本字典的名字却不知道它的名字(显然我的方法根本不管用)?如果我做了一些完全奇怪的事情,您必须原谅我,因为我对Python相当陌生,更不用说一般的编码了。你知道吗

编辑2:将问题标题从“到底是什么导致语法错误?”你知道吗

for item in playerList:
    playerList.index(item) = magicCharacterGenerationIndex
    dict(item) = {
        'Name' : "",
        'Class' : "",
        'Skills' : {},
        'Inventory' : [],
        'Magic' : 0,
        'Luck' : 0,
        'Gender' : ""
        }
    (dict(item))['Name'] = playerNames[magicCharacterGenerationIndex]
    (dict(item))['Class'] = playerClasses[magicCharacterGenerationIndex]
    (dict(item))['Gender'] = playerGenders[magicCharacterGenerationIndex]
    (dict(item))['Luck'] = random.randint(2,12)
    # This bit populates character skills.
    if (dict(item))['Class'] == Knight:
        (dict(item))['Skills'] = {
            'Appraise': 1,
            'Brawl': 2,
            'Melee': 3,
            'Negotiate': 4,
            'Ranged': 3,
            'Sneak': 1,
            'Status': 4,
            'Track': 2,
            }
    elif (dict(item))['Class'] == Barbarian:
        (dict(item))['Skills'] = {
            'Appraise': 2,
            'Brawl': 4,
            'Melee': 4,
            'Negotiate': 1,
            'Ranged': 1,
            'Sneak': 3,
            'Status': 2,
            'Track': 3,
            }
    elif (dict(item))['Class'] == Thief:
        (dict(item))['Skills'] = {
            'Appraise': 4,
            'Brawl': 2,
            'Melee': 3,
            'Negotiate': 1,
            'Ranged': 2,
            'Sneak': 4,
            'Status': 1,
            'Track': 3,
            }
    elif (dict(item))['Class'] == Ranger:
        (dict(item))['Skills'] = {
            'Appraise': 1,
            'Brawl': 2,
            'Melee': 3,
            'Negotiate': 1,
            'Ranged': 4,
            'Sneak': 3,
            'Status': 2,
            'Track': 4,
            }
    elif (dict(item))['Class'] == Enchanter:
        (dict(item))['Skills'] = {
            'Appraise': 3,
            'Brawl': 1,
            'Melee': 1,
            'Negotiate': 4,
            'Ranged': 2,
            'Sneak': 3,
            'Status': 4,
            'Track': 2,
            }
    # This next bit populates character inventories.
    if (dict(item))['Class'] == Knight:
        (dict(item))['Inventory'] = ['Kite Shield','Broadsword','Noble Steed','Lance']
    elif (dict(item))['Class'] == Barbarian:
        (dict(item))['Inventory'] = ['Dane Axe','Large Chunk of Beef','Spear','Magic Helmet']
    elif (dict(item))['Class'] == Thief:
        (dict(item))['Inventory'] = ['Dagger','Stolen Coinpurse','Lockpicks and Tools','Throwing Knives (8 Knives)']
    elif (dict(item))['Class'] == Ranger:
        (dict(item))['Inventory'] = ['Bow','Flint and Steel','Saxe Knife','Sturdy Arrows (36 Arrows)']
    elif (dict(item))['Class'] == Enchanter:
        (dict(item))['Skills'] = ['Sling','Spellbook','Raven Familiar','Staff of Magic Missiles (4 Charges)']
    # This segment eliminates the magic stat for all non-enchanter characters, and gives all enchanters a random Magic stat above 50.
    if (dict(item))['Class'] == Enchanter:
        (dict(item))['Magic'] = 50 + random.randint(0,50)
    else:
        del (dict(item))['Magic']
    print(dict(item))

Tags: statusmagictrackitemdictskillsclassinventory
1条回答
网友
1楼 · 发布于 2024-04-29 07:44:05

看起来您需要一个字典字典,因此应该在循环外创建一个空字典:

mydict = {}

然后,需要用mydict[item]替换每个(dict(item))。在第一个例子中,你说dict(item) = {...会导致语法错误,因为你把调用的结果放在赋值的LHS上。你知道吗

内圆括号用于调用语法,因此需要将它们改为用于索引语法的括号。正如其他人在评论中暗示的那样,你不需要外圆括号。你知道吗

你不想每次都调用dict()来创建一个新的。你知道吗

最后,当你开始学习之后,你可能会意识到你想要的是一个类而不是一本字典。属性语法比所有的括号和引号好得多。你知道吗

相关问题 更多 >