如何在空列表中为杂货店账单收据创建添加功能

时间:2019-07-12 06:38:04

标签: python

我得到了一项家庭作业,以创建一个计算杂货店账单的程序。 该程序将创建两个数组: -项目名称 -项目价格 该程序将从用户那里输入商品,并使用查找功能在价格数组中找到商品的价格。 该程序将调用该函数以查找总账单。 我的问题是我无法创建添加功能来查找总账单。

我编写的代码已经在数组中输入了商品名称和商品价格。然后搜索商品的相应价格。

NameAry = []
PriceAry = []

name = "abc"
while name != "":
    name = input("Enter item name or press 'enter' to quit.")
    if name != "":
        NameAry.append(name)
        price = float(input("Enter item price."))
        PriceAry.append(price)
    else:
        print("Data entry ends!")

def Lookup(n,NameAry):
    L = len(NameAry)
    Found = False
    count = 0
    while not Found and count < L:
        if n == NameAry[count]:
            return PriceAry[count]
        count = count + 1
    if not Found:
        return 0

SearchName = "abc"
while SearchName != "":
    SearchName = input("Enter name to lookup.")
    result = Lookup(SearchName,NameAry)
    if result == 0:
        print("Generating total bill")
    else:
        print("Item found",result)

3 个答案:

答案 0 :(得分:0)

我是根据我从您的代码中了解的来做到的。这不是您期望的,但可能是一个好的开始。

nameAry = []
priceAry = []

while True:
    name = input("Enter item name or press 'enter' to quit.")
    if name:
        nameAry.append(name)
        break
    else:
        print("Data entry ends!")

while True:
    price = float(input("Enter item price."))
    if price:
        priceAry.append(price)
        break
    else:
        print("Data entry ends!")

def lookupItem(item, itemsList, pricesList):
    itemIndex = itemsList.index(item)
    return pricesList[itemIndex]

while True:
    itemToFind = input("Enter name to lookup.")
    try:
        print("Item found", lookupItem(itemToFind, nameAry, priceAry))
    except ValueError:
        print("Generating total bill")
        break

答案 1 :(得分:0)

当您获得空值时,需要首先中断循环。要计算总价,您需要保留当前累计查询总数。

# Initialise empty lists
items = []
prices = []

# Lookup function
def lookup(item_name, items, prices):
    for i, item in enumerate(items):
        if item == item_name:
            return prices[i]
    return 0

# Read inputs until empty
while True:
    new_item = input("Item name bla bla:")
    if new_item == "":
        print("Data entry ends.")
        break
    item_price = float(input("Enter price:"))
    items.append(new_item)
    prices.append(item_price)

# Calculate total price
sum = 0
while True:
    lookup_item = input("Enter item to lookup:")
    if lookup_item == "":
        print("Total cost: {}".format(sum))
        break
    item_price = lookup(lookup_item, items, prices)
    print(item_price)
    sum += item_price

希望这就是您所需要的。

答案 2 :(得分:0)

欢迎堆栈溢出!

我不确定您的作业的真正限制是什么,但是如果您想编写有效的Python代码,则应该使用while循环放弃C风格的搜索。 python的命名约定也指定名称应为snake case'd,也应遵循该名称。

我对 C样式搜索的意思是,对列表进行迭代并在每次循环的迭代中为其编制索引在python中并不有效,并且看起来很丑陋。对于您的问题,首选for循环:

for item_name, item_price in zip(name_list, price_list):
    ...

其中zip包含两个列表,让您一次有效地遍历它们。在每次迭代中,来自name_list的元素存储在item_name中,来自price_list的元素存储在item_price中。 for循环会自己处理长度,这很方便,不是吗?

还要注意,在以下解决方案中,我将while循环更改为具有break的无限循环。可以认为这与其他语言的do..while循环等效。

names = []
prices = []

def lookup(name_to_find, name_list, price_list):
    for item_name, item_price in zip(name_list, price_list): # python-style search
        if item_name == name_to_find:
            return item_price
    return -1

while True:
    name = input("Enter item name or press 'enter' to quit: ")
    if name: # in this case same as name != ""
        names.append(name)
        price = float(input("Enter item price: "))
        prices.append(price)
    else:
        print("Data entry ends!")
        break

sum = 0.0
while True:
    item_to_find = input("Enter name to lookup: ")

    if item_to_find: # in this case same as item_to_find != ""
        result = lookup(item_to_find, names, prices)
        if result == -1:
            print("Item", item_to_find, "not found in the store!")
        else:
            sum += result
            print("Price of ", item_to_find, "is", result)
    else:
        print("Total is...", sum)
        break