【问题标题】:"Simple" Grocery List“简单”杂货清单
【发布时间】:2018-11-07 16:49:41
【问题描述】:

我有一个任务是在 python 中创建一个“简单”的杂货清单,其中要求用户输入杂货的名称和价格,然后是他们实际购买的商品和数量,然后显示总价。最初询问时必须将杂货放入字典中,第二部分询问用户他们在购买什么以及价格必须在第二个循环中,而不是在第一个循环中简单地询问“你要买多少”环形。这是我到目前为止所拥有的:

item = {}
choice = 0

while True:
    x = input('enter item: ')
    if x =='done':
        break
    y = float(input('enter price: '))

    item[x] = (y)

while True:

    x=input('enter item: ')

对于第二个 'while true' 声明,我尝试了这个,但没有成功:

while True:

    x=input('enter item: ')

    if x =='done':
        break
    z=input("enter amount you want to purchase: ")
    a=z*y

它回来了

type error, can't multiply sequence by non-int of type 'float'

任何帮助将不胜感激,因为如果我提前提交,我可以在周五跳过早班。谢谢!

【问题讨论】:

标签: python python-3.x


【解决方案1】:

在第二个 while 循环中你会得到错误。

type error, can't multiply sequence by non-int of type 'float'

因为您将字符串与浮点变量相乘。
当您编写z=input("enter amount you want to purchase: ")Python 时,将其存储为“str”类型。
您应该执行类型转换,只需在 input() 之前写入您想要的类型。
在您的情况下,只需更改此行。
z=(input("enter amount you want to purchase: ")) 变为 。

z=float(input("enter amount you want to purchase: "))

您的程序将运行。

【讨论】:

  • 伙计,我刚试过,我不敢相信它这么简单。今天坐在课堂上只是盯着显示器,这是一个简单的浮动命令?非常感谢!
  • @JonathanLudwig 如果您的问题已解决,请点击绿色复选标记接受答案,谢谢!
【解决方案2】:

所以第一个循环应该得到项目列表及其价格。

items = {}

while True:
    item = input("Item name: ")
    if item == 'done':
        break
    price = input("Item price: ")
    items[item] = price

然后第二部分应该询问您要购买的商品和数量

shopping_list = {}

while True:
    item = input("Item name: ")
    if item == 'done':
        break
    qty = input("How many: ")
    shopping_list[item] = qty

所以第三部分是如果您有两个字典,您如何获得总数,一个以商品名称为关键字,其中包含价格值,另一本以商品名称为关键字与数量的价值。我将把最终的实现细节留给你,但会在这里提供一些指示:

  • some_dictionary[key] 将给出存储在该键上的值
  • 如果该字典中不存在该键,它将引发KeyError
  • some_dictionary.get(key) 会做同样的事情,但如果密钥不存在,它将给出 None 而不是引发错误
  • some_dictionary.get(key, any_value) 会做同样的事情,但是在不存在的密钥上它会返回 any_value。
  • sum(any_collection_of_numbers) 会给你这些数字的总和

【讨论】:

    【解决方案3】:

    编辑:我所说的一些内容实际上是在我写作时被 OP 在编辑中删除的。

    变量choice 未使用,因此我们将其删除。据我所知,最后两行没有用,所以我放弃了。一切都可以与单个数据成员连接,因此为了自己的方便,我将其编写为一个类。

    class Groceries:
      def __init__(self):
        self.items= {}
      def run(self):
        while True:
          x = input('enter item: ')
          if x =='done':
              break
          y = float(input('enter price: '))
          self.items[x] = {"Price": y}
      def get_totals(self):
        for j in self.items.keys():
          self.items[j]["Quantity"] = int(
              input('enter how many {} you want: '.format(j)))
          self.items[j]["Total"
                       ] = self.items[j]["Quantity"] * self.items[j]["Price"]
    grocer = Groceries()
    
    grocer.run() 
    

    使用以下输入:

    enter item: Spam
    enter price: 3.5
    enter item: Eggs
    enter price: 2.5
    enter item: done
    

    还有.get_totals()

    enter how many Spam you want: 2
    enter how many Eggs you want: 4
    

    grocer.items 将是:

    {'Eggs': {'Price': 2.5, 'Quantity': 4, 'Total': 10.0},
     'Spam': {'Price': 3.5, 'Quantity': 2, 'Total': 7.0}}
    

    【讨论】:

    • 把它包装在一个类中似乎很愚蠢,但我想它可以工作。
    • 我实际上喜欢在类中组织事物而不是使用裸循环的脚本@AdamSmith——我同意这超出了要求,但我也认为它更具可扩展性。
    • @CharlesLandau 只是不是很 Pythonic。像这样的小脚本中的单例类很糟糕。
    • @AdamSmith 我同意这一点,但我希望有人在任何真实脚本中使用更多类和方法来构建它。毕竟这是别人的功课。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2013-06-29
    • 2019-02-24
    • 2016-11-06
    相关资源
    最近更新 更多