Python 程序 - 返回循环中的每个响应,而不仅仅是所需的响应

Python program - returning every response from a loop instead of just the desired one

我有以下 Python 程序,并希望该程序简单地 return 列表中相应项目的价格 'items'。相反,如您所见,它无法正常工作,要么中断,要么 returns“没有这样的项目”,然后是数字。我尝试了各种方法,但无法获得正确的输出顺序。

https://trinket.io/python/77909a6574

期望输出:

User enters: Chicken Wings
Output: 5

User enters: Jollof Rice
Output: 7

等等。

任何人都可以建议在 for 循环中使用 if 语句并在正确的时间跳出的修复方法和最佳实践。

def salestracker():
  print("---Sales Tracker---")
  print("---MENU---")
  print("""
  1. Find the price of an item
  2. Enter sales of an item
  3. Find total of the day
  
  """)
  
  items=["Chicken Wings","Jollof Rice", "Thai fried rice", "Dumplings"]
  price=[5,7,8,5]
  findprice(items,price)



def findprice(items,price):
  print("---Find Price---")
  item=input("Enter Item:")
  for i in range(len(items)):
    if item==items[i]:
      print(price[i])
      break
    else:
      break
  print("There is no such item")
salestracker()

这是进行查找的另一种方法,让 Python 进行搜索:

def findprice(items,price):
  print("---Find Price---")
  item=input("Enter Item:")
  if item in items:
      print(price[items.index(item)])
  else:
      print("There is no such item")

然而,更好的方法是一开始就使用正确的数据结构。通过存储在字典中,您可以在一个结构中携带两条信息:

def salestracker():
  print("---Sales Tracker---")
  print("---MENU---")
  print("""
  1. Find the price of an item
  2. Enter sales of an item
  3. Find total of the day
  
  """)
  
  menu = {
      "Chicken Wings": 5,
      "Jollof Rice": 7,
      "Thai fried rice": 8,
      "Dumplings": 5
  }
  findprice(menu)

def findprice(menu):
  print("---Find Price---")
  item=input("Enter Item:")
  if item in menu:
      print(menu[item])
  else:
      print("There is no such item")
salestracker()

没有解决的是大写问题。你的收银员会用拇指把你串起来,试图记住“鸡翅”中的两个词都是大写的,但在“泰国炒饭”中不是。如果您更进一步,请考虑将菜单项全部存储为小写,然后执行 item = item.lower().

关于您问题的“最佳实践”部分,您应该使用 Tim Roberts 的回答,但要直接回答您的代码未按预期工作的原因,这是一个简单的放置错误。它应该说的是:

def findprice(items,price):
  print("---Find Price---")
  item=input("Enter Item:")
  for i in range(len(items)):
    if item==items[i]:
      print(price[i])
      break
    else:
      print("There is no such item") # [1]
      break
  # print("There is no such item") # Move this line up to [1]
def findprice(items, price):
    print("---Find Price---")
    item = input("Enter Item:")
    try:
        index = items.index(item)
        print(price[index])
    except ValueError:
        print("There is no such item")

您也可以使用内置列表方法 - .index("")

我认为您应该将 'break' 替换为 'return'。 'break' 用于退出循环,而不是函数。所以,当它找到该项目时,它仍然打印“没有这样的项目”。你可以通过制作函数return来修复它,它实际上结束了函数的执行。

...
def findprice(items,price):
    print("---Find Price---")
    item=input("Enter Item:")
    for i in range(len(items)):
        if item==items[i]:
            print(price[i])
            return
    print("There is no such item")

...