簡體   English   中英

(IndexError:列表索引超出范圍)

[英](IndexError: list index out of range)

在制作這個簡單的程序時,我遇到了這個似乎與列表有關的錯誤。 但是,我真的不知道如何正確修復它。

PS:如果你能給我一些建議或者我可以讓我的程序變得更好的方法,那就太酷了。

def getOrder():
    mainDish = ["Burger", "Pizza", "Taco", "Italian Sandwich"]
    mainDish_Price = [3.55, 7.99, 12.99, 5.99]
    drink = ["Cola", "Pepsi", "Sprite", "Water"]
    drink_Price = [0.80, 0.60, 0.30, 0.20]
    sideDish = ["French Fries", "Onion Rings", "Salad", "Chips"]
    sideDish_Price = [1.25, 2.99, 1.75, 2.25]

    myOrder_Count = []
    myOrder_Cost = []
    qty_Count = []

    fullPrice = 0
    total_Drink_Order = 0
    total_MainDish_Order = 0
    total_SideDish_Order = 0
    count = 0
    i = 0

    while(True):
            print("AI : Resturant Bot Options.")
            print("AI : Choose [1] For Main Dish.")
            print("AI : Choose [2] For Sides.")
            print("AI : Choose [3] For Drinks.")
            print("AI : Choose [4] For Getting Reciept.")
            print("AI : Choose [5] For Exit.")

            choice = int(input("Select Your Choice : "))
            
            if(choice == 1):
                print("\n" + "AI:"
                    "\n\n1 : Burger               $3.55"
                    "\n\n2 : Pizza                $7.99"
                    "\n\n3 : Taco                 $12.99"
                    "\n\n4 : Italian Sandwich     $5.99")

                mainDish_Order = int(input("\n\nAI: Select Your Choice. "))
                qty = int(input("AI: Please Enter The Quantity.  "))
                if(mainDish_Order == 1):
                    myOrder_Count.append(mainDish[0])
                    myOrder_Cost.append(mainDish_Price[0])
                    count += 1
                    total_MainDish_Order += mainDish_Price[0] * qty
                
                elif(mainDish_Order == 2):
                    myOrder_Count.append(mainDish[1])
                    myOrder_Cost.append(mainDish_Price[1])
                    count += 1
                    total_MainDish_Order += mainDish_Price[1] * qty
                
                elif(mainDish_Order == 3):
                    myOrder_Count.append(mainDish[2])
                    myOrder_Cost.append(mainDish_Price[2])
                    count += 1
                    total_MainDish_Order += mainDish_Price[2] * qty
                
                elif(mainDish_Order == 4):
                    myOrder_Count.append(mainDish[3])
                    myOrder_Cost.append(mainDish_Price[3])
                    count += 1
                    total_MainDish_Order += mainDish_Price[3] * qty
                
            if(choice == 2):
                print("\n" + "AI: " + 
                    "\n\n1 : French Fries               $1.25"
                    "\n\n2 : Onion Rings                $2.99"
                    "\n\n3 : Salad                      $1.75"
                    "\n\n4 : Chips                      $2.25")

                sideDish_Order = int(input("AI : Please Select Your Choice."))
                qty = int(input("AI: Please Enter The Quantity : "))
                if(sideDish_Order == 1):
                    myOrder_Count.append(sideDish[0])
                    myOrder_Cost.append(sideDish_Price[0])
                    count += 1
                    total_SideDish_Order += sideDish_Price[0] * qty
                    
                elif(sideDish_Order == 2):
                    myOrder_Count.append(sideDish[1])
                    myOrder_Cost.append(sideDish_Price[1])
                    count += 1
                    total_SideDish_Order += sideDish_Price[1] * qty
                    
                elif(sideDish_Order == 3):
                    myOrder_Count.append(sideDish[2])
                    myOrder_Cost.append(sideDish_Price[2])
                    count += 1
                    total_SideDish_Order += sideDish_Price[2] * qty
                    
                elif(sideDish_Order == 4):
                    myOrder_Count.append(sideDish[3])
                    myOrder_Cost.append(sideDish_Price[3])
                    count += 1
                    total_SideDish_Order += sideDish_Price[3] * qty
                
            if(choice == 3):
                print("\n" + "AI :" 
                    "\n\n1 : Cola                   $0.80"
                    "\n\n2 : Pepsi                  $0.60"
                    "\n\n3 : Sprite                 $0.40"
                    "\n\n4 : Water                  $0.20")

                drink_Order = int(input("AI : Select Your Choice : "))
                qty = int(input("AI: Please Enter The Quantity : "))
                if(drink_Order == 1):
                    myOrder_Count.append(drink[0])
                    myOrder_Cost.append(drink_Price[0])
                    count += 1
                    total_Drink_Order += drink_Price[0] * qty
                    
                elif(drink_Order == 2):
                    myOrder_Count.append(drink[1])
                    myOrder_Cost.append(drink_Price[1])
                    count += 1
                    total_Drink_Order += drink_Price[1] * qty
                    
                elif(drink_Order == 3):
                    myOrder_Count.append(drink[2])
                    myOrder_Cost.append(drink_Price[2])
                    count += 1
                    total_Drink_Order += drink_Price[2] * qty
                    
                elif(drink_Order == 4):
                    myOrder_Count.append(drink[3])
                    myOrder_Cost.append(drink_Price[3])
                    count += 1
                    total_Drink_Order += drink_Price[3] * qty
            fullPrice = total_MainDish_Order + total_SideDish_Order + total_Drink_Order

            if(choice == 4):
                print("..")
                time.sleep(2)
                print("...")
                time.sleep(3)
                print("....")
                time.sleep(3)
                
                print("AI: Here's Your Reciept")
                print("            ")
                print("**************")       
                while(i < count):
                    print(f"Items : {myOrder_Count[i]}")
                    print(f"Cost : ${myOrder_Cost[i]}")
                    print(f"qty : {qty_Count[i]} \n")
                    i += 1
                
                print("**************")
                print(f"AI: The Final Cost Is ${fullPrice}")
                exit()

            if(choice == 5):
                print("AI: System Shutdown.")
                exit()

getOrder()

您的代碼中的問題是列表qty_Count始終為空,因此當代碼嘗試在列表為空時運行print(f"qty: {qty_Count[i]} \n")行時,它找不到索引所以程序崩潰了。

我找不到您在該列表中存儲任何數據的位置,因此要么找到解決該問題的方法 - 通過將數據插入列表 - 要么從打印中刪除該部分。

編輯:此代碼可以正常工作。

import time
def getOrder():
    mainDish = ["Burger", "Pizza", "Taco", "Italian Sandwich"]
    mainDish_Price = [3.55, 7.99, 12.99, 5.99]
    drink = ["Cola", "Pepsi", "Sprite", "Water"]
    drink_Price = [0.80, 0.60, 0.30, 0.20]
    sideDish = ["French Fries", "Onion Rings", "Salad", "Chips"]
    sideDish_Price = [1.25, 2.99, 1.75, 2.25]

    myOrder_Count = []
    myOrder_Cost = []
    qty_Count = []

    fullPrice = 0
    total_Drink_Order = 0
    total_MainDish_Order = 0
    total_SideDish_Order = 0
    count = 0
    i = 0

    while(True):
            print("AI : Resturant Bot Options.")
            print("AI : Choose [1] For Main Dish.")
            print("AI : Choose [2] For Sides.")
            print("AI : Choose [3] For Drinks.")
            print("AI : Choose [4] For Getting Reciept.")
            print("AI : Choose [5] For Exit.")

            choice = int(input("Select Your Choice : "))
            
            if(choice == 1):
                print("\n" + "AI:"
                    "\n\n1 : Burger               $3.55"
                    "\n\n2 : Pizza                $7.99"
                    "\n\n3 : Taco                 $12.99"
                    "\n\n4 : Italian Sandwich     $5.99")

                mainDish_Order = int(input("\n\nAI: Select Your Choice. "))
                qty = int(input("AI: Please Enter The Quantity.  "))
                qty_Count.append(qty)
                if(mainDish_Order == 1):
                    myOrder_Count.append(mainDish[0])
                    myOrder_Cost.append(mainDish_Price[0])
                    count += 1
                    total_MainDish_Order += mainDish_Price[0] * qty
                
                elif(mainDish_Order == 2):
                    myOrder_Count.append(mainDish[1])
                    myOrder_Cost.append(mainDish_Price[1])
                    count += 1
                    total_MainDish_Order += mainDish_Price[1] * qty
                
                elif(mainDish_Order == 3):
                    myOrder_Count.append(mainDish[2])
                    myOrder_Cost.append(mainDish_Price[2])
                    count += 1
                    total_MainDish_Order += mainDish_Price[2] * qty
                
                elif(mainDish_Order == 4):
                    myOrder_Count.append(mainDish[3])
                    myOrder_Cost.append(mainDish_Price[3])
                    count += 1
                    total_MainDish_Order += mainDish_Price[3] * qty
                
            if(choice == 2):
                print("\n" + "AI: " + 
                    "\n\n1 : French Fries               $1.25"
                    "\n\n2 : Onion Rings                $2.99"
                    "\n\n3 : Salad                      $1.75"
                    "\n\n4 : Chips                      $2.25")

                sideDish_Order = int(input("AI : Please Select Your Choice."))
                qty = int(input("AI: Please Enter The Quantity : "))
                qty_Count.append(qty)
                if(sideDish_Order == 1):
                    myOrder_Count.append(sideDish[0])
                    myOrder_Cost.append(sideDish_Price[0])
                    count += 1
                    total_SideDish_Order += sideDish_Price[0] * qty
                    
                elif(sideDish_Order == 2):
                    myOrder_Count.append(sideDish[1])
                    myOrder_Cost.append(sideDish_Price[1])
                    count += 1
                    total_SideDish_Order += sideDish_Price[1] * qty
                    
                elif(sideDish_Order == 3):
                    myOrder_Count.append(sideDish[2])
                    myOrder_Cost.append(sideDish_Price[2])
                    count += 1
                    total_SideDish_Order += sideDish_Price[2] * qty
                    
                elif(sideDish_Order == 4):
                    myOrder_Count.append(sideDish[3])
                    myOrder_Cost.append(sideDish_Price[3])
                    count += 1
                    total_SideDish_Order += sideDish_Price[3] * qty
                
            if(choice == 3):
                print("\n" + "AI :" 
                    "\n\n1 : Cola                   $0.80"
                    "\n\n2 : Pepsi                  $0.60"
                    "\n\n3 : Sprite                 $0.40"
                    "\n\n4 : Water                  $0.20")

                drink_Order = int(input("AI : Select Your Choice : "))
                qty = int(input("AI: Please Enter The Quantity : "))
                qty_Count.append(qty)
                if(drink_Order == 1):
                    myOrder_Count.append(drink[0])
                    myOrder_Cost.append(drink_Price[0])
                    count += 1
                    total_Drink_Order += drink_Price[0] * qty
                    
                elif(drink_Order == 2):
                    myOrder_Count.append(drink[1])
                    myOrder_Cost.append(drink_Price[1])
                    count += 1
                    total_Drink_Order += drink_Price[1] * qty
                    
                elif(drink_Order == 3):
                    myOrder_Count.append(drink[2])
                    myOrder_Cost.append(drink_Price[2])
                    count += 1
                    total_Drink_Order += drink_Price[2] * qty
                    
                elif(drink_Order == 4):
                    myOrder_Count.append(drink[3])
                    myOrder_Cost.append(drink_Price[3])
                    count += 1
                    total_Drink_Order += drink_Price[3] * qty
            fullPrice = total_MainDish_Order + total_SideDish_Order + total_Drink_Order

            if(choice == 4):

                
                print("AI: Here's Your Reciept")
                print("            ")
                print("**************")       
                while(i < count):
                    print(f"Items : {myOrder_Count[i]}")
                    print(f"Cost : ${myOrder_Cost[i]}")
                    print(f"qty : {qty_Count[i]} \n")
                    i += 1
                
                print("**************")
                print(f"AI: The Final Cost Is ${fullPrice}")
                exit()

            if(choice == 5):
                print("AI: System Shutdown.")
                exit()

getOrder()

對於超出范圍的列表,您不要 append 到 qty_Count。 您也可以擺脫 elif 只需使用 _Order 編號作為索引。 此外,當您只更改食物和價格時,重復打印。 例子:

        if(choice == 1):
            print("\n" + "AI:", end="")
            for food, price in zip(mainDish, mainDish_Price):
                print(f"\n\n1 : {food:20} ${price}")

            mainDish_Order = int(input("\n\nAI: Select Your Choice. "))
            qty = int(input("AI: Please Enter The Quantity.  "))
            myOrder_Count.append(mainDish[mainDish_Order-1])
            myOrder_Cost.append(mainDish_Price[mainDish_Order-1])
            count += 1
            total_MainDish_Order += mainDish_Price[mainDish_Order-1] * qty
            qty_Count.append(qty)

我很喜歡看你的劇本,我記得做過類似的事情。 如果您正處於使用函數的階段,並且看起來像這樣,那么我建議您使用更多的 go 並使您的程序更加模塊化並將其分解而不是一個 function 中的所有內容,它使調試成為容易得多。

暫無
暫無

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

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