【问题标题】:How to print out specific message if nothing matched within a for loop如果在 for 循环中没有匹配项,如何打印出特定消息
【发布时间】:2020-09-05 00:04:10
【问题描述】:

我的问题是,如果 for 循环中没有匹配项,如何打印出来。例如:

a = {'store' : 'A', 'menu' : 'pizza', 'price' : 20000}
b = {'store' : 'B', 'menu' : 'chicken', 'price' : 18000}
c = {'store' : 'C', 'menu' : 'noodle', 'price' : 5000}
d = {'store' : 'D', 'menu' : 'sushi', 'price' : 15000}
e = {'store' : 'E', 'menu' : 'chicken', 'price' : 23000}
f = {'store' : 'F', 'menu' : 'pork', 'price' : 30000}

Total = [a, b, c, d, e, f]

l = input('what food?:  ')
p = int(input('how much you want to spend?  '))

for i in range(5):
    if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
        print('menu', Total[i]['store'], 'price', Total[i]['price'])

循环结束后,如果没有满足条件的store,我想打印出'There is no store'

【问题讨论】:

  • 在某个地方保留一个布尔值,例如 found = False,然后在你的 if 中将其设置为 True,如果你可以检查它是否仍然为 False,则在外部,表示未找到
  • 如果同一种食物出现在多个菜单上,您是要打印两次还是只打印一次?

标签: python python-3.x loops for-loop


【解决方案1】:

如果您只对符合条件的第一家餐厅感兴趣,可以使用lesser-known Python construct

for i in range(5):
    if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
        print('menu', Total[i]['store'], 'price', Total[i]['price'])
        break
else:
    print("Sorry, there are no matching restaurants.")

【讨论】:

    【解决方案2】:

    只需添加一个布尔值来检查是否找到了价格。

    a = {'store' : 'A', 'menu' : 'pizza', 'price' : 20000}
    b = {'store' : 'B', 'menu' : 'chicken', 'price' : 18000}
    c = {'store' : 'C', 'menu' : 'noodle', 'price' : 5000}
    d = {'store' : 'D', 'menu' : 'sushi', 'price' : 15000}
    e = {'store' : 'E', 'menu' : 'chicken', 'price' : 23000}
    f = {'store' : 'F', 'menu' : 'pork', 'price' : 30000}
    
    Total = [a, b, c, d, e, f]
    
    l = input('what food?:  ')
    p = int(input('how much you want to spend?  '))
    
    found = False
    for i in range(5):
        if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
            print('menu', Total[i]['store'], 'price', Total[i]['price'])
            found =  True
    
    if not found:
        print ("No stores were found.")
    

    【讨论】:

      【解决方案3】:

      我会将您的字典变量转换为嵌套字典,其中menu 是关键:

      a = {"store": "A", "menu": "pizza", "price": 20000}
      b = {"store": "B", "menu": "chicken", "price": 18000}
      c = {"store": "C", "menu": "noodle", "price": 5000}
      d = {"store": "D", "menu": "sushi", "price": 15000}
      e = {"store": "E", "menu": "chicken", "price": 23000}
      f = {"store": "F", "menu": "pork", "price": 30000}
      
      Total = [a, b, c, d, e, f]
      
      restructured = {d.get("menu"): {k: v for k, v in d.items() if k != "menu"} for d in Total}
      

      这会给你这个结构:

      {'pizza': {'store': 'A', 'price': 20000}, 'chicken': {'store': 'E', 'price': 23000}, 'noodle': {'store': 'C', 'price': 5000}, 'sushi': {'store': 'D', 'price': 15000}, 'pork': {'store': 'F', 'price': 30000}}
      

      我们可以避免这种重组,方法是一开始就没有单独的变量,而是使用嵌套字典。您也不需要遍历字典(线性搜索),这对于重复查找(恒定时间)要快得多。

      然后您可以简单地按菜单项访问该词典,并检查您是否可以购买菜单项:

      food = input("what food?:  ")
      budget = int(input("how much you want to spend?:  "))
      
      menu = restructured.get(food)
      if menu:
          price = int(menu.get("price"))
          if budget <= price:
              store = menu.get("store")
              print(f"Store: {store}, Menu: {food}, Price: {price}")
          else:
              print(f"{food} costs too much!")
      else:
          print(f"{food} not found in menu!")
      

      我保持上面的代码相对简单,但是有更优雅的方法可以做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-06
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多