-->
当前位置:首页 > 题库 > 正文内容

程序填空题:力的较量 - 实验16 数据分析之排序 - 《Python编程基础及应用实验教程》 - 高教社

Luz2年前 (2022-06-24)题库2227
如果一个列表的元素均为某一自定义类实例化的对象,对于这样的列表排序,一般可以通过某个函数,对其成员属性值进行运算,结合key关键字进行排序; 也可以通过类定义时,重写特殊方法__lt__进行对象的比较,然后可直接排序。<br>
请将下述程序补充完整并上机调试,使其可以生成期望的排序结果。
<br>

python
class Force:
def __init__(self,x,y):
self.fx,self.fy = x, y

def show(self):
return "(%f,%f)"%(self.fx,self.fy)
__repr__ = show

def __lt__(self,force2):
return self.fx*self.fx + self.fy*self.fy < force2.fx*force2.fx \
+ force2.fy*force2.fy

fList = [Force(1,2), Force(0,2),Force(3,4),Force(2,1)]

ff = fList.copy()
ff.sort()
print(ff)

ft = sorted(fList,key =lambda x : )
print(ft)


期望的执行结果为:<br>

[(0.000000,2.000000), (1.000000,2.000000), (2.000000,1.000000), (3.000000,4.000000)]
[(0.000000,2.000000), (1.000000,2.000000), (2.000000,1.000000), (3.000000,4.000000)]


【解题提示】
* 定义了一个力的类,希望按力的模(大小)进行排序。类定义重写了__lt__方法,也就是小于(<)关系运算。同时重写了__repr__方法,这样可以直接输出对象。
* __lt__方法的名称源自英文less than。
* 16行代码直接用sort方法对ff列表排序,该排序依赖于对象的特殊方法__lt__。
* 19行代码利用力的属性结合关键字key进行了排序。这里需要填的内容是通过对象成员表示力的模。
* lambda a:a.b表示一个参数为a,返回a对象的属性b作为返回值的匿名函数。

<br>**拼尽全力还是不会?参考B站习题讲解**<br>

哔哩哔哩up主:[海洋饼干叔叔](https://space.bilibili.com/384177380) [Python课程](https://www.bilibili.com/video/BV1kt411R7uW/)
[Python习题](https://www.bilibili.com/video/BV1iL411t7UZ/)
[简洁的C和C++](https://www.bilibili.com/video/BV1it411d7zx/)
作者每天分享一篇关于C/C++/Python的技术文章,学习编程不迷路。
![image.png](~/7c4cfd2d-8e3e-40cd-826d-299d4200e600.png)










答案:
第1空:x.fx * x.fx + x.fy * x.fy

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。