当我打印列表而不是使用列表中的名称时,输出将显示索引号。 Python 2D清单

时间:2018-08-24 19:58:35

标签: python python-3.x

这是我的代码,这些列表是我遇到问题的地方。我是python的新手,我不了解2D列表的工作原理,但是我需要在程序中添加一个等级。任何帮助将不胜感激。

#Define Vars
import locale
locale.setlocale( locale.LC_ALL, '')

order_total = 0.0
price = 3.5
fmt_price = locale.currency(price, grouping=True)
qty = int(0)

#cookie list
cookie_list = list()
cookie_list = "Savannah Thin-Mints Tag-a-longs Peanut-Butter Sandwich".split()


order_list = list()


#cookie choices

def disp_items():
    print("Please choose one of our flavours. Enter the item number to choose")
    for c in range(len(cookie_list)):
        print("{}. \t{}".format(c+1, cookie_list[c]))

    print()

#Menu Choices

def disp_menu():
    choice_list = ["a", "d", "m", "q"]

    while True:
        print("\nWhat would you like to do?")
        print("a = add an item")
        print("d = delete an item")
        print("m = display the meal so far")
        print("q = quit")
        choice = input("\nmake a selection: ")

        if choice in choice_list:
            return choice
        else:
            print("I dont't understand that entry. Please Try again.")

# Math Function**********************

def calc_tot(qty):
    #this function is qty * price
    return qty * 3.5





def disp_order():
    print("\nGirl Scout Cookie Order for", cust)
    print()
    print("Itm\tName\tQty\tPrice")
    print("---\t----\t----\t----")
    order_total_items = 0           #accumulator
    order_price = 0

    for c in range(len(order_list)):
        detail_list = [" ", 0]


        detail_list.append(order_list)

        print("{}.\t{}\t{}\t{}".format(c+1, order_list[c][0], order_list[c][1], price))
        order_total_items += order_list[c][1]
        order_price += price


    print("\nYour Order Contains {} items for total of {} \n".format(order_total_items, order_price))
    print("-" * 30)







#ADD Process

def add_process():
    valid_data = False

    while not valid_data:
        disp_items()

        try:
            item = int(input("Enter item number: "))

            if 1 <= item <= len(cookie_list):
                valid_data = True
            else:
                print("\nThat was not a vaild choice, please try again.")

        except Exception as detail:
            print("error: ", detail)


    #Valid Qty
    valid_data = False

    while not valid_data:

        try:

            qty = int(input("Enter Quantity: "))

            if 1 <= qty <= 10:
                valid_data = True
            else:
                print("\nThat was not a valid quantity, please try again.")

        except Exception as detail:
            print("Error; ", detail)
            print("Please try again")



    #Function call for multiplication
    item_total = calc_tot(qty)
    fmt_total = locale.currency(item_total, grouping=True)

#User Choice

    print("\nYou choose: {} boxes of {} for a total of {}".format(qty,
                                                cookie_list[item-1],
                                                fmt_total))
    print()


    #verify inclusion of this item
    valid_data = False

    while not valid_data:
        incl = input("Would you like to add this to your order? (y/n): ")
        print()
        if incl.lower() =="y":

            #2-D List
            inx = item - 1

            detail_list = [inx, qty]
            order_list.append(detail_list)

            valid_data = True
            print("{} was added to your order".format(cookie_list[inx]))

        elif incl.lower() == "n":
            print("{} was not added to your order".format(cookie_list[inx]))
            valid_data = True

        else:
            print("That was not a vaild response, please try again")

#Delete function

def del_item():
    if len(order_list) == 0:
        print("\n** You have no items in your order to delete **\n")
    else:
        print("\nDelete an Item")
        disp_order()

        valid_data = False
        while not valid_data:
            try:
                choice = int(input("Please enter the item number you would like to delete: "))
                if 1<= choice <= len(order_list):

                    choice = choice - 1

                    print("\nItem {}. {} with {} boxes will be deleted".format(choice +1,
                                                                                order_list[choice][0],
                                                                                order_list[choice][1]))
                    del order_list[choice]
                    valid_data = True

            except Exception as detail:
                print("Error: ", detail)
                print("Please try again")



#Main program
# Banner

print("Welcome to the Girl Scout Cookie")
print("Order Program")

cust = input("Please enter your name: ")

while True:
    choice = disp_menu()
    if choice == "a":
        add_process()
    elif choice == "d":
        del_item()
    elif choice == "q":
        break

    disp_order()




disp_order()
print("Thank you for your order")

这是输出

Girl Scout Cookie Order for *****

Itm Name    Qty     Price
--- ----    ----    ----
1.  **0**        1        3.5
2.  **0**        1        3.5
3.  **4**        5        3.5

Your Order Contains 7 items for total of 10.5 

name下,应该有一个女童子军Cookie的名称,而不是索引号,我该如何解决?
非常感谢。

1 个答案:

答案 0 :(得分:0)

disp_order()中打印订单时,应从第二列的cookie_list[c]开始打印。然后打印整个项目,而不是仅打印第一个字母。

print("{}.\t{}\t{}\t{}".format(c+1, cookie_list[c], order_list[c][1], price))

Cookie名称的长度不相等,因此您必须对此进行调整。