一、课堂练习

描述

使用input输入若干个数,输出个数以及其中最大的数

1.普通方法实现

  1. def max(*a):
  2. m=a[0]
  3. b=0
  4. for x in a:
  5. if x>m:
  6. m=x
  7. b+=1
  8. print(b)
  9. return m
  10. a=input().split()
  11. lst=[]
  12. for i in a:
  13. lst.append(int(i))
  14. print(max(*lst))

2.用列表推导式实现

  1. def max(*a):
  2. m=a[0]
  3. b=0
  4. for x in a:
  5. if x>m:
  6. m=x
  7. b+=1
  8. print(b)
  9. return m
  10. a=input().split()
  11. lst=[int(i) for i in a]
  12. print(max(*lst))

二、列表推导式

列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。

列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。

  1. [x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]

他的执行顺序是:

  1. for x in range(1,5)
  2. if x > 2
  3. for y in range(1,4)
  4. if y < 3
  5. x*y

1、示例

方法1

  1. egg_list1 = []
  2. for i in range(10):
  3. egg_list1.append('鸡蛋%s' % i)
  4. print(egg_list1)

方法2

  1. egg_list2 = ['鸡蛋%s' %i for i in range(10)]
  2. print(egg_list2)

2、语法

  1. [expression for item1 in iterable1 if condition1
  2. for item2 in iterable2 if condition2
  3. ...
  4. for itemN in iterableN if conditionN
  5. ]
  6. 类似于
  7. ret=[]
  8. for item1 in iterable1:
  9. if condition1:
  10. for item2 in iterable2:
  11. if condition2:
  12. ...
  13. for itemN in iterableN:
  14. if conditionN:
  15. ret.append(expression)

3、优点:方便,改变了编程习惯,可称之为声明式编程。

三、海龟绘图

在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。

海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。

我们来看一个指挥小海龟绘制一个长方形的简单代码:

  1. # 导入turtle包的所有内容:
  2. from turtle import *
  3.  
  4. # 设置笔刷宽度:
  5. width(4)
  6.  
  7. # 前进:
  8. forward(200)
  9. # 右转90度:
  10. right(90)
  11.  
  12. # 笔刷颜色:
  13. pencolor('red')
  14. forward(100)
  15. right(90)
  16.  
  17. pencolor('green')
  18. forward(200)
  19. right(90)
  20.  
  21. pencolor('blue')
  22. forward(100)
  23. right(90)
  24.  
  25. # 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
  26. done()

在命令行运行上述代码,会自动弹出一个绘图窗口,然后绘制出一个长方形:

从程序代码可以看出,海龟绘图就是指挥海龟前进、转向,海龟移动的轨迹就是绘制的线条。要绘制一个长方形,只需要让海龟前进、右转90度,反复4次。

调用width()函数可以设置笔刷宽度,调用pencolor()函数可以设置颜色。更多操作请参考turtle库的说明。

绘图完成后,记得调用done()函数,让窗口进入消息循环,等待被关闭。否则,由于Python进程会立刻结束,将导致窗口被立刻关闭。

turtle包本身只是一个绘图库,但是配合Python代码,就可以绘制各种复杂的图形。例如,通过循环绘制5个五角星:

  1. from turtle import *
  2.  
  3. def drawStar(x, y):
  4. pu()
  5. goto(x, y)
  6. pd()
  7. # set heading: 0
  8. seth(0)
  9. for i in range(5):
  10. fd(40)
  11. rt(144)
  12.  
  13. for x in range(0, 250, 50):
  14. drawStar(x, 0)
  15.  
  16. done()

程序执行效果如下:

使用递归,可以绘制出非常复杂的图形。例如,下面的代码可以绘制一棵分型树:

  1. from turtle import *
  2.  
  3. # 设置色彩模式是RGB:
  4. colormode(255)
  5.  
  6. lt(90)
  7.  
  8. lv = 14
  9. l = 120
  10. s = 45
  11.  
  12. width(lv)
  13.  
  14. # 初始化RGB颜色:
  15. r = 0
  16. g = 0
  17. b = 0
  18. pencolor(r, g, b)
  19.  
  20. penup()
  21. bk(l)
  22. pendown()
  23. fd(l)
  24.  
  25. def draw_tree(l, level):
  26. global r, g, b
  27. # save the current pen width
  28. w = width()
  29.  
  30. # narrow the pen width
  31. width(w * 3.0 / 4.0)
  32. # set color:
  33. r = r + 1
  34. g = g + 2
  35. b = b + 3
  36. pencolor(r % 200, g % 200, b % 200)
  37.  
  38. l = 3.0 / 4.0 * l
  39.  
  40. lt(s)
  41. fd(l)
  42.  
  43. if level < lv:
  44. draw_tree(l, level + 1)
  45. bk(l)
  46. rt(2 * s)
  47. fd(l)
  48.  
  49. if level < lv:
  50. draw_tree(l, level + 1)
  51. bk(l)
  52. lt(s)
  53.  
  54. # restore the previous pen width
  55. width(w)
  56.  
  57. speed("fastest")
  58.  
  59. draw_tree(l, 4)
  60.  
  61. done()

执行上述程序需要花费一定的时间,最后的效果如下:

下面绘制一个小猪佩奇:

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. """
  4. @time :2018/10/10 10:18
  5. @author: yang.bin
  6. """
  7. # coding:utf-8
  8. import turtle as t
  9. # 绘制小猪佩奇
  10. # =======================================
  11.  
  12. t.pensize(4)
  13. t.hideturtle()
  14. t.colormode(255)
  15. t.color((255, 155, 192), "pink")
  16. t.setup(840, 500)
  17. t.speed(10)
  18.  
  19. # 鼻子
  20. t.penup()
  21. t.goto(-100,100)
  22. t.pendown()
  23. t.seth(-30)
  24. t.begin_fill()
  25. a = 0.4
  26. for i in range(120):
  27. if 0 <= i < 30 or 60 <= i < 90:
  28. a = a+0.08
  29. t.left(3) # 向左转3度
  30. t.forward(a) # 向前走a的步长
  31. else:
  32. a = a-0.08
  33. t.left(3)
  34. t.forward(a)
  35. t.end_fill()
  36.  
  37. t.penup()
  38. t.seth(90)
  39. t.forward(25)
  40. t.seth(0)
  41. t.forward(10)
  42. t.pendown()
  43. t.pencolor(255, 155, 192)
  44. t.seth(10)
  45. t.begin_fill()
  46. t.circle(5)
  47. t.color(160, 82, 45)
  48. t.end_fill()
  49.  
  50. t.penup()
  51. t.seth(0)
  52. t.forward(20)
  53. t.pendown()
  54. t.pencolor(255, 155, 192)
  55. t.seth(10)
  56. t.begin_fill()
  57. t.circle(5)
  58. t.color(160, 82, 45)
  59. t.end_fill()
  60.  
  61. # 头
  62. t.color((255, 155, 192), "pink")
  63. t.penup()
  64. t.seth(90)
  65. t.forward(41)
  66. t.seth(0)
  67. t.forward(0)
  68. t.pendown()
  69. t.begin_fill()
  70. t.seth(180)
  71. t.circle(300, -30)
  72. t.circle(100, -60)
  73. t.circle(80, -100)
  74. t.circle(150, -20)
  75. t.circle(60, -95)
  76. t.seth(161)
  77. t.circle(-300, 15)
  78. t.penup()
  79. t.goto(-100, 100)
  80. t.pendown()
  81. t.seth(-30)
  82. a = 0.4
  83. for i in range(60):
  84. if 0 <= i < 30 or 60 <= i <90:
  85. a = a+0.08
  86. t.left(3) # 向左转3度
  87. t.forward(a) # 向前走a的步长
  88. else:
  89. a = a-0.08
  90. t.left(3)
  91. t.forward(a)
  92. t.end_fill()
  93.  
  94. # 耳朵
  95. t.color((255, 155, 192), "pink")
  96. t.penup()
  97. t.seth(90)
  98. t.forward(-7)
  99. t.seth(0)
  100. t.forward(70)
  101. t.pendown()
  102. t.begin_fill()
  103. t.seth(100)
  104. t.circle(-50, 50)
  105. t.circle(-10, 120)
  106. t.circle(-50, 54)
  107. t.end_fill()
  108.  
  109. t.penup()
  110. t.seth(90)
  111. t.forward(-12)
  112. t.seth(0)
  113. t.forward(30)
  114. t.pendown()
  115. t.begin_fill()
  116. t.seth(100)
  117. t.circle(-50, 50)
  118. t.circle(-10, 120)
  119. t.circle(-50, 56)
  120. t.end_fill()
  121.  
  122. #眼睛
  123. t.color((255, 155, 192), "white")
  124. t.penup()
  125. t.seth(90)
  126. t.forward(-20)
  127. t.seth(0)
  128. t.forward(-95)
  129. t.pendown()
  130. t.begin_fill()
  131. t.circle(15)
  132. t.end_fill()
  133.  
  134. t.color("black")
  135. t.penup()
  136. t.seth(90)
  137. t.forward(12)
  138. t.seth(0)
  139. t.forward(-3)
  140. t.pendown()
  141. t.begin_fill()
  142. t.circle(3)
  143. t.end_fill()
  144.  
  145. t.color((255, 155, 192), "white")
  146. t.penup()
  147. t.seth(90)
  148. t.forward(-25)
  149. t.seth(0)
  150. t.forward(40)
  151. t.pendown()
  152. t.begin_fill()
  153. t.circle(15)
  154. t.end_fill()
  155.  
  156. t.color("black")
  157. t.penup()
  158. t.seth(90)
  159. t.forward(12)
  160. t.seth(0)
  161. t.forward(-3)
  162. t.pendown()
  163. t.begin_fill()
  164. t.circle(3)
  165. t.end_fill()
  166.  
  167. # 腮
  168. t.color((255, 155, 192))
  169. t.penup()
  170. t.seth(90)
  171. t.forward(-95)
  172. t.seth(0)
  173. t.forward(65)
  174. t.pendown()
  175. t.begin_fill()
  176. t.circle(30)
  177. t.end_fill()
  178.  
  179. # 嘴
  180. t.color(239, 69, 19)
  181. t.penup()
  182. t.seth(90)
  183. t.forward(15)
  184. t.seth(0)
  185. t.forward(-100)
  186. t.pendown()
  187. t.seth(-80)
  188. t.circle(30, 40)
  189. t.circle(40, 80)
  190.  
  191. # 身体
  192. t.color("red", (255, 99, 71))
  193. t.penup()
  194. t.seth(90)
  195. t.forward(-20)
  196. t.seth(0)
  197. t.forward(-78)
  198. t.pendown()
  199. t.begin_fill()
  200. t.seth(-130)
  201. t.circle(100,10)
  202. t.circle(300,30)
  203. t.seth(0)
  204. t.forward(230)
  205. t.seth(90)
  206. t.circle(300,30)
  207. t.circle(100,3)
  208. t.color((255,155,192),(255,100,100))
  209. t.seth(-135)
  210. t.circle(-80,63)
  211. t.circle(-150,24)
  212. t.end_fill()
  213.  
  214. # 手
  215. t.color((255,155,192))
  216. t.penup()
  217. t.seth(90)
  218. t.forward(-40)
  219. t.seth(0)
  220. t.forward(-27)
  221. t.pendown()
  222. t.seth(-160)
  223. t.circle(300,15)
  224. t.penup()
  225. t.seth(90)
  226. t.forward(15)
  227. t.seth(0)
  228. t.forward(0)
  229. t.pendown()
  230. t.seth(-10)
  231. t.circle(-20,90)
  232.  
  233. t.penup()
  234. t.seth(90)
  235. t.forward(30)
  236. t.seth(0)
  237. t.forward(237)
  238. t.pendown()
  239. t.seth(-20)
  240. t.circle(-300,15)
  241. t.penup()
  242. t.seth(90)
  243. t.forward(20)
  244. t.seth(0)
  245. t.forward(0)
  246. t.pendown()
  247. t.seth(-170)
  248. t.circle(20,90)
  249.  
  250. # 脚
  251. t.pensize(10)
  252. t.color((240,128,128))
  253. t.penup()
  254. t.seth(90)
  255. t.forward(-75)
  256. t.seth(0)
  257. t.forward(-180)
  258. t.pendown()
  259. t.seth(-90)
  260. t.forward(40)
  261. t.seth(-180)
  262. t.color("black")
  263. t.pensize(15)
  264. t.forward(20)
  265.  
  266. t.pensize(10)
  267. t.color((240, 128, 128))
  268. t.penup()
  269. t.seth(90)
  270. t.forward(40)
  271. t.seth(0)
  272. t.forward(90)
  273. t.pendown()
  274. t.seth(-90)
  275. t.forward(40)
  276. t.seth(-180)
  277. t.color("black")
  278. t.pensize(15)
  279. t.forward(20)
  280.  
  281. # 尾巴
  282. t.pensize(4)
  283. t.color((255, 155, 192))
  284. t.penup()
  285. t.seth(90)
  286. t.forward(70)
  287. t.seth(0)
  288. t.forward(95)
  289. t.pendown()
  290. t.seth(0)
  291. t.circle(70, 20)
  292. t.circle(10, 330)
  293. t.circle(70, 30)
  294. t.done()

程序执行效果如下:

python 编程2的更多相关文章

  1. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  2. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  3. Python编程核心之makeTextFile.py和readTextFile.py

    引言: 最近大半年都在学习python编程,在双十一的时候购买了<Python编程核心>,看到makeTextFile.py和readTextFile.py两个例子有点错误,所以在这里给修 ...

  4. Python编程规范(PEP8)

    Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...

  5. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  6. 学习Python编程的11个资源

    用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程语言.如果你正打算学习 web 开发,Python 是一个不错的选择,甚至你想学游戏开发也可 以从 Python 开始,因 ...

  7. Emacs 配置 Python 编程环境

    python编程环境设置涉及到:自动完成.语法检查.虚拟环境. 为了不把系统搞乱,在python的虚拟环境中安装相关的插件. 一.安装python虚拟环境 virtualenvwrapper sudo ...

  8. Python编程规范及性能优化(转载)

    转载地址:http://codeweblog.com/python编程规范及性能优化/

  9. 精通 Oracle+Python,第 5 部分:存储过程、Python 编程

    调用数据库存储过程及其他感兴趣的高级 Python 编程功能. 2010 年 3 月发布 对于涉及数据库的软件开发来说,有两种主流开发方法:一种是在应用程序中(对于三层体系结构,也可以是在中间件中)实 ...

  10. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

随机推荐

  1. Python项目搬迁,快捷导出环境依赖包到requirements.txt

    项目搬迁的时候,需要把当前的环境依赖包导出,然后到部署项目的服务器上安装依赖. 我们可以通过下面的命令执行,把依赖包导出到requirements.txt文件里. 生成requirements.txt ...

  2. springcloud~配置中心~对敏感信息加密

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

  3. angular cli 反向代理实现跨域

    版本: 1.后端实现跨域(php) header("Access-Control-Allow-Origin: *"); // // 响应类型 // header('Access-C ...

  4. CSS入门(定位的简单总结)

    一.定位 普通流定位 浮动定位 相对定位 绝对定位 固定定位 二.position定位 1.static(默认值) 2.relative 相对定位 3.absolute 绝对定位 4.fixed 固定 ...

  5. c++11 auto 与auto& 遍历vector区别

    目录 说明 c++11 auto 与auto& 遍历区别 今天被这个问题坑了一天,一直以为是算法错了,debug了一天,最后暴力生成数据才发现,测试代码如下: 说明 转载请注明出处:https ...

  6. 华为2019年NE40E-X8,承诺命令

    commit每敲一行命令,都得确认一下.以防误操作.

  7. mongodb基本安装

    这次搞搞NOSQL, 但最简单的MONGODB安装,还是要作点配置的. 一,安装网址: https://www.mongodb.com/download-center/community?jmp=na ...

  8. Django中的sql注入

    Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整 ...

  9. Java之DateFormat类

    DateFormat类概述 java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进 ...

  10. Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......

    2019-08-14起笔 小熊的情况描述: 父类A继承自QWidget,所以父类A自动添加了Q_OBJECT.  子类B继承自父类A,子类B没有添加Q_OBJECT.在子类B中给动态创建的控件添加事件 ...