【问题标题】:python list using inputs使用输入的python列表
【发布时间】:2014-04-18 17:31:06
【问题描述】:

我正在为一个项目制作一个披萨订购系统,用户可以选择他们想要的披萨数量:

pizza_number=0
goodpizza_number=False 
while not goodpizza_number:
    try:
        pizza_number= int(input("How many Pizzas do you want? (MAX 5): "))
        if pizza_number ==0 or pizza_number > 5:
            print("Not a correct choice, Try again")
        else:
            goodpizza_number=True 
    except ValueError:
        print("Not a number, Try again")

然后是用户的比萨饼列表:

PIZZA_LIST=["Tandoori chicken: $8.50", "Prawn: $8.50", "Ham and cheese: $8.50", "Pepperoni: $8.50", "Hawaiian: $8.50","Beef and onion: $8.50","Meat lovers: $8.50", "Satay chicken: $13.50", "Apricot chicken: $13.50", "Supreme cheese:13.50", "Italian beef: $13.50", "Mediterraneo: $13.50"]
for index in range(0, len(PIZZA_LIST)):
    print(index, PIZZA_LIST[index])

用户可以通过这个选择他们想要的披萨:

pizza=[] 
for n in range(pizza_number): #covers values from 0 to 9 
    pizza = pizza + [int(input("Choose a pizza: "))] 
print(pizza) 

列表中的前 7 个披萨必须为 8.50 美元,列表中的最后 5 个披萨必须为 13.50 美元。我如何将用户的选择加在一起并获得他们选择的所有比萨饼的价格并添加到总成本中?

【问题讨论】:

  • 将比萨饼存储在像{"tandoori chichen": 8.50, ...} 这样的字典中,这样您就可以轻松查找属于哪种比萨饼的价格以及总价,您只需将它们相加即可

标签: python list input range


【解决方案1】:

首先,您可能想要更改披萨名称和价格的显示方式。由于您将用户输入作为整数,我建议使用元组列表:

pizzas_with_prices = [('Tandoori chicken', 8.5), ('Prawn', 8.5) ..., ('Mediterraneo', 13.5)]

然后您可以遍历您的 pizza 列表(最好将其命名为 selected_pizzas 左右):

total_price = 0
for selected in selected_pizzas:
  total_price += pizzas_with_prices[selected][1]
print total_price

另外,还有一些改进代码的建议:

对于第一个代码块,可以去掉goodpizza_number

number_of_pizzas = 0
while 0 < number_of_pizzas <= 5:
  try:
    number_of_pizzas = int(input("How many Pizzas do you want? (MAX 5): "))
  except ValueError:
    print("Not a number, try again")

按照建议,在第二个块上,您可以使用元组列表并使用enumerate

pizzas_with_prices = [('Tandoori chicken', 8.5), ('Prawn', 8.5) ..., ('Mediterraneo', 13.5)]
for index, pizza in enumerate(pizzas_with_prices):
  print("%d %s: $%s" % (index, pizza[0], pizza[1]))

【讨论】:

  • 这很好用,我将如何制作它,所以它只显示最终成本,因为它显示每个成本是这样的:How many Pizzas do you want? (MAX 5): 5 0 Tandoori chicken: $8.50 1 Prawn: $8.50 2 Ham and cheese: $8.50 3 Pepperoni: $8.50 4 Hawaiian: $8.50 5 Beef and onion: $8.50 6 Meat lovers: $8.50 7 Satay chicken: $13.50 8 Apricot chicken: $13.50 9 Supreme cheese:13.50 10 Italian beef: $13.50 11 Mediterraneo: $13.50 Choose a pizza: 1 Choose a pizza: 3 Choose a pizza: 5 Choose a pizza: 6 Choose a pizza: 7 8.5 17.0 25.5 34.0 47.5 How would i make it only display 47.5?
  • 你在 for 循环中有 print total_price 吗?它应该在外面。
  • 哦,你是对的,我已经缩进了打印。谢谢你!您还认为您可以简要解释这些行在做什么,以便我更好地理解吗?谢谢for selected in selected_pizzas: total_price += pizzas_with_prices[selected][1]
  • 当然。在selected_pizzas 中,我们将所有用户选择存储为整数。因此,在您在评论中的示例中,它将是[1, 3, 5, 6, 7]。然后我们循环它,将每个项目存储到变量selected 中。从pizzas_with_prices,然后我们根据返回('name', price) 形式的元组的索引(pizzas_with_prices[selected])选择正确的披萨,因此我们选择了第二项,价格(pizzas_with_prices[selected][1])。最后我们将该价格添加到total_price。希望对您有所帮助。
  • 如果您喜欢这个答案,除了接受它作为答案之外,还可以考虑给它投票!谢谢。
【解决方案2】:

您需要在字典中创建另一个披萨名称和披萨价格。用户选择的比萨饼可以放在一个列表中。获得列表后,遍历列表以从比萨名称-价格字典中获取价格,然后添加以获取总价。

【讨论】:

    【解决方案3】:
    total_cost = sum([float(PIZZA_LIST[idx].split('$')[1]) for idx in pizza])
    

    顺便说一句:你可以替换

    pizza = pizza + [int(input("Choose a pizza: "))] 
    

    与

    pizza.append(int(input("Choose a pizza: ")))
    

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 2018-12-25
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多