第四课 循环 & 图灵完备系统
NCF显示不好,要获得更好的阅读体验,请访问我的博客:www.alwayswdc.com,但请在NCF进行回复讨论
一 循环
我们学了前两种程序执行结构,现在来看第三种:循环。循环是一段 在程序中只出现一次,但可能会连续运行多次的代码或代码组。正是由于"循环"的存在,计算 机的快速计算能力才真正有了用武之地,否则算法的每一行都需要人工敲进去,那和在纸上进行 计算有何异?
通常来讲,程序语言中的循环有两种结构形式:当型、直到型、遍历 型循环。Python中没有直到型循环(一般为 Do loop Until结构,这里 就不详讲,请各位自查资料),Python中的当型循环和遍历型循环分别对 应为w.hile语句和For语句。
while 判断表达式: 语句体 |
while 判断表达式: 语句体 1(不包含break句) else: 语句体 2 |
An_2 = 1 An_1 = 1 shulie = [An_2,An_1] while 1: An = An_2 + An_1 An_2 = An_1 An_1 = An shulie.append(An) if len(shulie) > 100: break print (shulie) |
>>> ================================ RESTART================================ >>> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181,6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229,832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817,39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733,1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025,20365011074, 32951280099, 53316291173, 86267571272, 139583862445,225851433717, 365435296162, 591286729879, 956722026041, 1548008755920,2504730781961, 4052739537881, 6557470319842, 10610209857723,17167680177565, 27777890035288, 44945570212853, 72723460248141,117669030460994, 190392490709135, 308061521170129, 498454011879264,806515533049393, 1304969544928657, 2111485077978050, 3416454622906707,5527939700884757, 8944394323791464, 14472334024676221,23416728348467685, 37889062373143906, 61305790721611591,99194853094755497, 160500643816367088, 259695496911122585,420196140727489673, 679891637638612258, 1100087778366101931,1779979416004714189, 2880067194370816120, 4660046610375530309,7540113804746346429, 12200160415121876738, 19740274219868223167,31940434634990099905, 51680708854858323072, 83621143489848422977,135301852344706746049, 218922995834555169026, 354224848179261915075,573147844013817084101] |
##元组运行建立一个元素或者空元 组,当建立一个只有一个元素的元组时,在该元素之后加上逗号,',' a = () b = (1,) print (a,b) ##元组内可以包含任意的其他类型 变量,包括数字、字符串、元组、列表等 c = ('good',1,'school',4,6,22.5, ['abc',123], ('asd', ['2',3,4])) ##切片索引等操作,,详见第二课 内容 print (c [0],c[- 1],c [6]) print (c [1:3]) print (c[- 3:- 1]) ##使用tuple() 函数将一个序列转换成元组 d = tuple('ducument') e = tuple(c[-1]) f = tuple(c[-2]) print (d,e,f) |
>>> ================================ RESTART================================ >>> () (1,) good ('asd', ['2', 3, 4]) ['abc', 123] (1, 'school') (22.5, ['abc', 123]) ('d', 'u', 'c', 'u', 'm', 'e', 'n', 't') ('asd', ['2', 3, 4]) ('abc', 123) |
>>> a = [3,2,1] >>> b = (a,4,5,6,7) >>> a.sort() >>> a [1, 2, 3] >>> b ([1, 2, 3], 4, 5, 6, 7) |
##初始建立一个列表有多种方法 ##直接赋值 a = [1,2,3,4,5] ##对字符串使用spit() 函数 b = 'always'.split() ##使用range() 函数建立一个列表,即一个从起 始整数到末尾整数(不包含该数)的间隔1等差数列 c = [range (10)] print (a,b,c) ##列表的索引切片与元组类似 print (a [0],a[- 1],c [4]) print (b [1:3]) print (c[- 3:- 1]) ##对列表中的元素可以重新赋值 a [0],a [1] =99,100 b [3] = ['big','arc',23.5] print (a,b) ##列表与列表可以进行相加得到一 个新列表(注意这里的相加不是布尔运算,仅有set集合才具有布尔运算功能) print (a,b) print (a +b) |
>>> ================================ RESTART================================ >>> [1, 2, 3, 4, 5] ['a', 'l', 'w', 'a', 'y', 's'] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 1 5 4 ['l', 'w'] [7, 8] [99, 100, 3, 4, 5] ['a', 'l', 'w', ['big', 'arc', 23.5], 'y', 's'] [99, 100, 3, 4, 5] ['a', 'l', 'w', ['big', 'arc', 23.5], 'y', 's'] [99, 100, 3, 4, 5, 'a', 'l', 'w', ['big', 'arc', 23.5], 'y', 's'] |
a = list(range(5)) ##列表相加 a = a + ['a','b','c'] print (a) ##append ()方法可以向列表内尾部添加一个 元素,可以是单个变量、元组、列表等 a.append (['d','e','f']) print (a) ##extend ()方法接收一个列表参数,将新列 表中的每个元素添加到原列表中,注意如果是该列表内含有列表或元组,那么子列表或元组不会 被分开,如果是一个字符串,字符串会被分开成每个字符。 a = list(range(5)) a.extend ('hello') a.extend (['a','b','c', ['d','e','f']]) ##insert ()方法在列表指定位置插入一个元 素。注意是插入到该位置原有元素的前面。 a = list(range(5)) b = list(range(6,10)) a.insert (1,b) a.insert(- 2,10) |
>>> ================================ RESTART================================ >>> [0, 1, 2, 3, 4, 'a', 'b', 'c'] [0, 1, 2, 3, 4, 'a', 'b', 'c', ['d', 'e', 'f']] [0, 1, 2, 3, 4, 'h', 'e', 'l', 'l', 'o'] [0, 1, 2, 3, 4, 'h', 'e', 'l', 'l', 'o', 'a', 'b', 'c', ['d', 'e', 'f']] [0, [6, 7, 8, 9], 1, 2, 3, 4] [0, [6, 7, 8, 9], 1, 2, 10, 3, 4] |
##列表中删除元素### a = list(range(10)) ##del函数按索引或切片进行删除,类 似于GH中的Cull Index。 del a [1:3] print (a) ##remove ()方法按元素的值进行删除一个元 素,若不存在该元素,会报错 a.remove (4) print (a) ##pop() 方法类似于del,通过索引(不包括切片)删除 列表中元素,但它返回删除的这个值,不指定参数返回最后一个。 a = list(range(10)) b = a.pop() c = a.pop (5) print (b,c) |
>>> ================================ RESTART================================ >>> [0, 3, 4, 5, 6, 7, 8, 9] [0, 3, 5, 6, 7, 8, 9] 9 5 |
##列表排序与倒序### import random ##列表乱序 a = list(range(10)) a = random.sample(a,len (a)) print (a) ##列表排序,一般情况下字符串和 数字不能混排序 a.sort() print (a) ##列表倒序 a.reverse() print (a) |
>>> ================================ RESTART================================ >>> [6, 7, 4, 2, 8, 9, 1, 3, 0, 5] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] |
##列表检索### a = ['a','c','d','a','b','3'] ##len() 检索列表长度 print (len (a)) ##断某个元素是否在列表或不在用 in和not in操作符 print ('a' in a ) print ('a' not in a ) ##统计某个元素在列表中出现的次 数用count() 方法 print (a.count ('a')) ##检查某个元素在列表中首次出现 的位置用index() 方法 print (a.index ('a')) print (a.index ('a',2,5)) ##指定切片内的某个元素出现位置 |
>>> ================================ RESTART================================ >>> >>> 6 True False 2 0 3 |
for i in 可迭代对象: 循环语句体 1 |
>>> for i in ('ChongQing'): print (i) C h o n g Q i n g >>> |
>>> a = range(100) >>> b = xrange(100) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] >>> b xrange (100) |
import random first_name = '赵 钱 孙 李 周 吴 郑 王' last_name = '梅 阳 林 妮 博 宝 冰 波 贝' first_name = random.sample (first_name.split (),len (first_name.split())) last_name = random.sample (last_name.split (),len (last_name.split())) for i in first_name: for j in last_name: print(i +j,' ',end = '') |
>>> ================================ RESTART================================ >>> >>> 吴妮 吴林 吴阳 吴博 吴波 吴宝 吴梅 吴贝 吴冰 周妮 周林 周阳 周博 周波 周宝 周梅 周贝 周冰 钱妮 钱林 钱阳 钱博 钱波 钱宝 钱梅 钱贝 钱冰 赵妮 赵林 赵阳 赵博 赵波 赵宝 赵梅 赵贝 赵冰 李妮 李林 李阳 李博 李波 李宝 李梅 李贝 李冰 王妮 王林 王阳 王博 王波 王宝 王梅 王贝 王冰 郑妮 郑林 郑阳 郑博 郑波 郑宝 郑梅 郑贝 郑冰 孙妮 孙林 孙阳 孙博 孙波 孙宝 孙梅 孙贝 孙冰 |
for i in range(len(first_name)): for j in range(len(last_name)): print (first_name [i]+ last_name[j],end = '') |
>>> name_list = '赵 钱 孙 李 周 吴 郑 王' >>> import random >>> name = random.sample (name_list.split (),len (name_list.split())) >>> for i,j in enumerate(name): print ('%d %s大川 ' %(i +1,j)) 1 郑大川 2 赵大川 3 孙大川 4 周大川 5 吴大川 6 钱大川 7 王大川 8 李大川 >>> |
>>> a = [1,3,5,7] >>> b = [2,4,6,8] >>> c = zip(a,b) >>> list(c) [(1, 2), (3, 4), (5, 6), (7, 8)] >>> list(zip(*c)) [(1, 3, 5, 7), (2, 4, 6, 8)] |
>>> for i,j in c: print(i,j) 1 2 3 4 5 6 7 8 |
import 模块 [as 别名] |
from 模块import 子对象 1,子对象2.. from 模块import * |
#-*- coding:utf-8 -*- __author__ = 'Wang Dachuan @ChongQing Univercity' __copyright__ = '<共享,非商业,署名>' from _tkinter import _flatten import turtle ##定义基本变量,初始状态和迭代 替换 l = 'line' length = 500 angle = 60.0 base = [l,- angle*2,l,- angle*2,l] xi = [l,angle,l,- angle*2,l,angle,l] ##迭代过程 for i in range(5): ##替换过程 for j in range(len(base)): if l == base [j]: base[j] = xi length = length/3 ##_flatten为将多维数组拍平函数 base = list(_flatten (base)) ##turtle绘图 turtle.up() turtle.goto(- 250,160) turtle.down() turtle.speed (10) for i in base: if i == l: turtle.forward(length) else: turtle.left(i) turtle.done() |
claudemit 发表于 2013-9-12 03:22
请问王老师,我用JetBrains PyCharm 2.7运行5_forloop1.py没法打印出结果
但是也没有报错,debug显示
这是 ...
wdc63 发表于 2013-9-12 15:03
ironpython中也可以导入turtle图形库
http://ironpython-test.readthedocs.org/en/latest/library/turtl ...
claudemit 发表于 2013-9-12 19:22
我从python3.4的lib里找的相应文件夹复制到 C:\Program Files\Rhinoceros 5.0 Beta (64-bit)\Plug-ins\Ir ...
欢迎光临 NCF参数化建筑论坛 (http://ncf-china.com/) | Powered by Discuz! X3.2 |