我得到了一项家庭作业,以创建一个计算杂货店账单的程序。 该程序将创建两个数组: -项目名称 -项目价格 该程序将从用户那里输入商品,并使用查找功能在价格数组中找到商品的价格。 该程序将调用该函数以查找总账单。 我的问题是我无法创建添加功能来查找总账单。
我编写的代码已经在数组中输入了商品名称和商品价格。然后搜索商品的相应价格。
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)
答案 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