这是一个项目的一部分,我已经做了一段时间了。我很难用我真正能写的东西来合成心理伪代码,这主要是由于个人对东西如何工作的误解。在
我使用以下类跟踪虚构水果摊的库存:
class Fruit(object)
def __init__(self,name,qty,price)
self.color = str(color)
self.qty = int(qty)
self.price = float(price)
def getName(self): return self.color
def getQty(self): return self.qty
def getPrice(self): return self.price
def description(self): return self.color,self.qty,self.price
此类中的对象最终将作为字典键的值导入。每个键可以有多个值,存储在一个列表中,这样在打印字典时,它会返回如下内容(为了可读性,使用换行符:)
^{pr2}$我现在试图得到我想象中的水果摊上所有水果的总值。我最初的想法是将每个值作为一个列表来处理,在列表中迭代,直到找到一个整数,再将该整数乘以它后面索引中的浮点数,然后将该数量添加到一个有连续总数的变量中;然后继续寻找另一个整数。如果列表“Cherry”的“index 1”不是(Red,5,5.99)而不是(2),那么这将非常有效。在
所以,有几个问题。在
每次我做这样的事情,我有一个指令式的多个值,这些值都是类对象,每个值都存储为一个附加符号(因为没有更好的方法来调用它)。是应该发生的事情,还是我需要重新评估我正在做的事情的方式,因为我导致了这种情况的发生?
如果我不需要在这里重新评估我的选择,有没有一种方法可以分解“附加说明”(因为没有更好的东西可以立即出现在脑海中),从而能够将整个事情作为一个列表来对待?
有没有更好的方法来做我想做的事情,不需要迭代列表?
提前谢谢。一个星期来,我一直在与这个问题的各个部分作斗争。在
我将首先抛弃
returnFoo
方法,因为键入apple.price
的时间更短:如果不接受
^{pr2}$qty='100'
之类的任意输入,则也不需要类型转换:剩下的就是一个只存储值的类。那样的话,我就用字典:
要计算成本,首先需要水果:
然后您可以使用
for
循环:可以使用
sum
和生成器表达式进一步简化:另一种方法是使用
FruitStand
类和原始的Fruit
类:假设字典是这样的:
实际上,您只需遍历字典就可以得到它的键:
^{pr2}$然后,您可以使用字典的
items
方法来获得key
,value
对的元组(您称之为“插入式”):list
s(括号内的[]
)也是可编辑的:因此,我们可以使用每个
fruits
列表来访问我们的tuple
:正如我们在
items
中看到的,我们可以将元组解压为多个值:因此,我们可以将每个
fruit
解压为其组成部分:然后得到总数并不难:
尽管如此,有很多更清晰的做事方式:
您可以使用列表理解来简化
for
循环:可以翻译为以下列表理解:
因此,我们可以将嵌套的
for
循环转换为:因为我们实际上不需要列表,所以我们可以去掉它,而Python将为我们创建一个生成器:
您可以将}的{},保存的意义是
__add__
方法添加到Fruit
中,这样将两组水果一起添加在一起就可以得到这两组Fruit
的总成本(但是您可能需要创建一个中间数据结构来完成此操作,例如Basket
,因此Fruit
不必担心实际上不属于{Fruit
的任何实例都有内在量1。我省略了这个选项的代码,因为这个答案已经太长了。您要查找的单词是"tuple"。这些“附加说明”是tuples。在
Python的一个主要优点是它用于迭代列表的紧凑语法。您可以计算一行中每种水果的价格总和:
分解它,
sum()
中的内容称为generator expression。for color, qty, price in fruit
遍历fruit
,并将元组解压为三个命名变量。然后可以在for
的左侧使用这些变量。对于fruit
列表中的每个元组,生成器表达式计算qty * price
。在如果将此表达式放在方括号内,它将变成list comprehension,并允许您查看计算值。在
^{pr2}$相关问题 更多 >
编程相关推荐