簡體   English   中英

為什么會出現此索引錯誤?

[英]Why am I getting this Index Error?

我正在嘗試為LPTHW做額外的功課分配,我想我可能正在嘗試一些我不知道該功能真正目的的東西。 我正在嘗試測試購買的東西,特別是在我的代碼中,如果用戶購買了某個商品,它將從其當前商品列表中彈出該商品,並將其替換為新商品。 測試購買功能時,出現索引錯誤。 關於如何使其正常工作的任何想法?

def buy_weapon(weapons):
    """big bit of code that allows you to buy a weapons from a weapon list.
The function acts a little differently after level zero weapons"""
    global current_weapon
    if weapons == level_zero_weapons:
        sword_price = level_zero_price()
        blunt_price = level_zero_price()
        agile_price = level_zero_price()
        print t.bright_yellow_on_magenta + """
Please type in the weapon you want to buy.

%s, price: %d gold pieces

%s, price: %d gold pieces

%s, price: %d gold pieces.
""" % (weapons[0], sword_price, weapons[1], blunt_price,weapons[2], 
       agile_price)

        weapon_choice = raw_input(":> ")
        if "sword" in weapon_choice:
            current_weapon = weapons[0]
            inventory(weapons[0])
            character_sheet.append(current_weapon)
        elif weapons[1] in weapon_choice:
            current_weapon = weapons[1]
            inventory(weapons[1])
            character_sheet.append(current_weapon)
        elif weapons[2] in weapon_choice:
            current_weapon = weapons[2]
            inventory(weapons[2])
            character_sheet.append(current_weapon)
        else: 
            print "I dont know what %s means" % weapon_choice
            buy_weapon(level_zero_weapons)

    elif weapons == level_one_weapons:
        sword_price = level_one_price()
        blunt_price = level_one_price()
        agile_price = level_one_price()
        print"""
Type in the weapon you want to buy, type quit to return to the barracks.

%s, price: %d gold pieces

%s, price: %d gold pieces

%s, price: %d gold pieces.
""" % (weapons[0], sword_price, weapons[1], blunt_price, weapons[2],
       agile_price)

        weapon_choice = raw_input(":> ")
        if weapons[0] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[0]
            inventory(weapons[0])
            character_sheet.append(current_weapon)
        elif weapons[1] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[1]
            inventory(weapons[1])
            character_sheet.append(current_weapon)
        elif weapons[2] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[2]
            inventory(weapons[2])
            character_sheet.append(current_weapon)
        else: 
            print "I dont know what %s means" % weapon_choice
            buy_weapon(level_one_weapons)

    elif weapons == level_two_weapons:
        sword_price = level_two_price()
        blunt_price = level_two_price()
        agile_price = level_two_price()
        print"""
Type in the weapon you want to buy, type quit to return to the barracks.

%s, price: %d gold pieces

%s, price: %d gold pieces

%s, price: %d gold pieces.
""" % (weapons[0], sword_price, weapons[1], blunt_price,weapons[2], 
       agile_price)

        weapon_choice = raw_input(":> ")
        if weapons[0] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[0]
            inventory(weapons[0])
            character_sheet.append(current_weapon)
        elif weapons[1] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[1]
            inventory(weapons[1])
            character_sheet.append(current_weapon)
        elif weapons[2] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[2]
            inventory(weapons[2])
            character_sheet.append(current_weapon)
        else: 
            print "I dont know what %s means" % weapon_choice
            buy_weapon(level_two_weapons)

    elif weapons == level_three_weapons:
        sword_price = level_three_price()
        blunt_price = level_three_price()
        agile_price = level_three_price()
        print"""
Type in the weapon you want to buy, type quit to return to the barracks.

%s, price: %d gold pieces

%s, price: %d gold pieces

%s, price: %d gold pieces.
""" % (weapons[0], sword_price, weapons[1], blunt_price,weapons[2], 
       agile_price)

        weapon_choice = raw_input(":> ")
        if weapons[0] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[0]
            inventory(weapons[0])
            character_sheet.append(current_weapon)
        elif weapons[1] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[1]
            inventory(weapons[1])
            character_sheet.append(current_weapon)
        elif weapons[2] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[2]
            inventory(weapons[2])
            character_sheet.append(current_weapon)
        else: 
            print "I dont know what %s means" % weapon_choice
            buy_weapon(level_three_weapons)

    elif weapons == level_four_weapons:
        sword_price = level_four_price()
        blunt_price = level_four_price()
        agile_price = level_four_price()
        print"""
Type in the weapon you want to buy, type quit to return to the barracks.

%s, price: %d gold pieces

%s, price: %d gold pieces

%s, price: %d gold pieces.
""" % (weapons[0], sword_price, weapons[1], blunt_price,weapons[2], 
       agile_price)

        weapon_choice = raw_input(":> ")
        if weapons[0] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[0]
            inventory(weapons[0])
            character_sheet.append(current_weapon)
        elif weapons[1] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[1]
            inventory(weapons[1])
            character_sheet.append(current_weapon)
        elif weapons[2] in weapon_choice:
            character_sheet.pop(current_weapon)
            current_weapon = weapons[2]
            inventory(weapons[2])
            character_sheet.append(current_weapon)
        else: 
            print "I dont know what %s means" % weapon_choice
            buy_weapon(level_four_weapons)      
    else:
        print"~~~There is a bug somwhere, forgot to assign (weapons)\n\n\n"
    raw_input(t.white_on_red("""
Your current weapon is now a %s. Press Enter To Continue
""" % current_weapon))

# Weapon lists 
level_zero_weapons = ['short sword', 'club', 'dagger']
level_one_weapons = ['sword' 'mace', 'rapier']
level_two_weapons = ['long sword', 'morningstar', 'trident']
level_three_weapons = ['claymore', 'flail', 'sycthe']
level_four_weapons = ['bastard sword, dragon bone, crystal halbred']

這是我嘗試運行文件的位置。

pp.pprint(character_sheet)
raw_input(t.white_on_red("Please Press Enter To Buy A Weapon"))
buy_weapon(level_zero_weapons)
buy_weapon(level_one_weapons)
pp = pprint.PrettyPrinter(indent=30)
pp.pprint(character_sheet)

最后是我的輸出。

Your current weapon is now a dagger. Press Enter To Continue

Traceback (most recent call last):
  File "lodarena.py", line 398, in <module>
    character_gen()
  File "lodarena.py", line 393, in character_gen
    buy_weapon(level_one_weapons)
  File "lodarena.py", line 139, in buy_weapon
    """ % (weapons[0], sword_price, weapons[1], blunt_price, weapons[2], agile_price)
IndexError: list index out of range
Raymond-Weisss-MacBook-Pro:lodarena Raylug$ 

PS我使用Python 2.7

buy_weapons函數中,將第一行設置為“打印武器”,以調試您的代碼。 你可能沒有通過你以為你在通過的東西

而且,當您學習python時,並且您正在做我們大多數人在第一次學習語言時所做的相同的事情,您可能希望研究一些數據結構。 我猜您還沒有准備好對象,但是使用嵌套字典可能值得,例如:

weapons = {1 : {'sword': {'name':'name here',
                            'price': 123},
                  'blunt': {'name':'name here',
                            'price': 123},
                  'agile': {'name':'name here',
                            'price': 123},
                  },
           2 : {'sword': {'name':'name here',
                            'price': 123},
                  'blunt': {'name':'name here',
                            'price': 123},
                  'agile': {'name':'name here',
                            'price': 123},
                  },
          #add levels as you need
          }

基本上,您正在創建一個精美的查找類型的事物,該事物跟蹤,級別,然后是武器類型,並帶有名稱和價格,您可以像這樣訪問它們:

level = 1
type = 'sword'
weaponname = weapons[level][type]['name']
weaponprice = weapons[level][type]['price']

暫無
暫無

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

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