我有一个鸭子类,这样创建的每个Duck对象都包含翼展和权重字段变量。对于每只鸭子,应该随机初始化每一个。应将翼展初始化为[80.0,100.0] cm范围内的随机浮动。重量应在[0.7,1.6] kg范围内随机初始化。我有
import random
class Duck:
def __init__(self):
self.wingspan = round(random.uniform(80.0, 100.0), 1)
self.weight = round(random.uniform(0.7,1.6), 2)
第二部分要求我编写一个名为makeFlock()的函数,它接受一个整数参数n,并返回n个Duck对象的列表。
def makeFlock(n):
flock = []
for _ in range(n):
flock.append(Duck())
return(flock)
最后,我需要编写一个名为sortDucks()的函数,该函数将Duck对象列表作为参数,并根据ducks翼展返回按升序排序的列表。给出的提示是使用合并排序算法,但我不太清楚如何做到这一点。谁能解释一下? *不能使用任何内置功能
答案 0 :(得分:1)
这应该有效:
首先,为简单起见,我将makeFlock
更改为List comprehensions。
其次,我使用sorted
函数进行排序 - 您可以阅读更多here
import random
class Duck:
def __init__(self):
self.wingspan = round(random.uniform(80.0, 100.0), 1)
self.weight = round(random.uniform(0.7,1.6), 2)
def makeFlock(n):
return [Duck() for _ in range(n)]
def sortDucks(ducks):
return sorted(ducks, key=lambda duck: duck.weight)
flock = makeFlock(5)
sorted_flock = sortDucks(flock)
for duck in sorted_flock:
print duck.weight
如果你不能使用sorted
功能,我很快就写了这个。如果您要我解释,请告诉我。
def sortDucks(ducks):
# list with the first duck inside
sorted_ducks = [ducks[0]]
for d in range(1, len(ducks)):
# place the second duck into pos 0
sorted_ducks.insert(0, ducks[d])
# Loop over the sorted_ducks list and place the duck where the next duck has a larger weight
for s in range(1, len(sorted_ducks)):
if ducks[d].weight < sorted_ducks[s].weight:
break
else:
sorted_ducks.pop(s-1)
sorted_ducks.insert(s, ducks[d])
return sorted_ducks