毕达哥拉斯树与python代码

合集下载

Python的Lambda函数用法详解

Python的Lambda函数用法详解

Python的Lambda函数⽤法详解在Python中有两种函数,⼀种是def定义的函数,另⼀种是lambda函数,也就是⼤家常说的匿名函数。

今天我就和⼤家聊聊lambda函数,在Python编程中,⼤家习惯将其称为表达式。

1.为什么要⽤lambda函数?先举⼀个例⼦:将⼀个列表⾥的每个元素都平⽅。

先⽤def来定义函数,代码如下def sq(x):return x*xmap(sq,[y for y in range(10)])再⽤lambda函数来编写代码map(lambda x: x*x,[y for y in range(10)])从这个简单的例⼦,我们可以看出,⽤lambda函数⾸先减少了代码的冗余,其次,⽤lambda函数,不⽤费神地去命名⼀个函数的名字,可以快速的实现某项功能,最后,lambda函数使代码的可读性更强,程序看起来更加简洁。

从上⾯这个简单的例⼦,也可以看出来lambda函数的语法是唯⼀的,其形式如下:lambda argument_list:expersion语法中的argument_list是参数列表,它的结构与Python中函数(function)的参数列表是⼀样的,例如a,ba=1,b=2*args**kwargsa,b=1,*args空....语法中的expression是⼀个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单⾏的。

⽐如以下的⼀些合法的表达式1Nonea+bsum(a)1 if a >10 else 0......除了上⾯提到的lambda函数的优点外,我看有的⽂章说⽤lambda函数会提⾼效率,那究竟是不是呢?我们写⼀段代码来验证⼀下import time# 测试的Def函数def square1(n):return n ** 2# 测试的Lambda函数square2 = lambda n: n ** 2print(time.time())# 使⽤Def函数i = 0while i < 1000000000:square1(100)i += 1print(time.time())# 使⽤lambda函数i = 0while i < 1000000000:square2(100)i += 1print(time.time())1413272496.271413272703.05 (Def 函数:207s)1413272904.49 (Lambda函数:201s)从上⾯可以看出,两种的所需的时间差不多,效率丝毫不受影响。

python中的lambda用法

python中的lambda用法

Python中的lambda用法在Python编程语言中,lambda函数是一种匿名函数,也被称为”小函数”。

它是一种快速定义单行的简单函数的方法。

与常规函数不同,lambda函数没有名称,并且可以在使用时直接定义和调用。

lambda函数的基本语法lambda函数的基本语法如下:lambda arguments : expression其中,arguments表示参数列表,可以包含多个参数,用逗号分隔。

expression表示表达式,在lambda函数被调用时会被计算并返回结果。

示例:使用lambda定义一个简单的加法函数下面是一个使用lambda定义一个简单的加法函数的示例:add = lambda x, y : x + yprint(add(2, 3)) # 输出:5在这个示例中,我们定义了一个名为add的lambda函数,它接受两个参数x和y,并返回它们的和。

通过调用add(2, 3),我们得到了5作为结果。

lambda函数与常规函数的比较与常规函数相比,lambda函数具有以下几点不同之处:1.匿名性:lambda函数是匿名的,没有名称。

2.简洁性:使用lambda可以更简洁地定义简单的功能。

3.单行表达式:lambda函数通常只包含一个表达式,并且返回该表达式的结果。

4.可调用性:lambda函数可以像常规函数一样被调用。

lambda函数的应用场景lambda函数在一些特定的场景中非常有用,例如:1. 函数式编程在函数式编程中,经常需要对列表或其他集合进行转换、过滤或映射等操作。

使用lambda函数可以简洁地定义这些操作。

numbers = [1, 2, 3, 4, 5]squared_numbers = list(map(lambda x: x**2, numbers))print(squared_numbers) # 输出:[1, 4, 9, 16, 25]在这个示例中,我们使用lambda函数和map函数将列表中的每个元素平方,并将结果存储在squared_numbers列表中。

python案例代码30个

python案例代码30个

python案例代码30个以下是30个Python案例代码:1.计算两个数的和```pythondef add_numbers(num1, num2):return num1 + num2result = add_numbers(5, 10)print(result)```2.检查一个数是否为偶数```pythondef is_even(num):if num % 2 == 0:return Trueelse:return Falseresult = is_even(7)print(result)```3.计算一个列表的平均值```pythondef calculate_average(numbers): total = sum(numbers)average = total / len(numbers) return averagenumbers = [1, 2, 3, 4, 5]result = calculate_average(numbers) print(result)```4.判断一个字符串是否为回文字符串```pythondef is_palindrome(string):reversed_string = string[::-1]if string == reversed_string: return Trueelse:return Falseresult = is_palindrome("racecar")print(result)```5.找出一个列表中的最大值和最小值```pythondef find_max_min(numbers):max_value = max(numbers)min_value = min(numbers)return max_value, min_valuenumbers = [1, 2, 3, 4, 5]max_num, min_num = find_max_min(numbers) print(max_num, min_num)```6.将字符串中的大写字母转换为小写字母```pythondef convert_to_lowercase(string):return string.lowerresult = convert_to_lowercase("Hello World") print(result)```7.判断一个数是否为素数```pythondef is_prime(num):if num < 2:return Falsefor i in range(2, int(num ** 0.5) + 1): if num % i == 0:return Falsereturn Trueresult = is_prime(17)print(result)```8.统计一个字符串中每个字符的出现次数```pythondef count_characters(string):char_count = {}for char in string:if char in char_count:char_count[char] += 1else:char_count[char] = 1return char_countresult = count_characters("hello") print(result)```9.将一个列表中的元素逆序排列```pythondef reverse_list(lst):return lst[::-1]numbers = [1, 2, 3, 4, 5]result = reverse_list(numbers) print(result)```10.计算一个数的阶乘```pythondef factorial(num):result = 1for i in range(1, num + 1):result *= ireturn resultresult = factorial(5)print(result)```11.删除一个列表中的重复元素```pythondef remove_duplicates(lst):return list(set(lst))numbers = [1, 2, 2, 3, 4, 4, 5] result = remove_duplicates(numbers) print(result)```12.将两个列表合并成一个新的列表```pythondef merge_lists(list1, list2): return list1 + list2numbers1 = [1, 2, 3]numbers2 = [4, 5, 6]result = merge_lists(numbers1, numbers2) print(result)```13.判断一个字符串是否为数字```pythondef is_number(string):try:float(string)return Trueexcept ValueError:return Falseresult = is_number("123")print(result)```14.排序一个列表```pythondef sort_list(lst):return sorted(lst)numbers = [3, 1, 4, 2, 5]result = sort_list(numbers)print(result)```15.计算一个数的平方根```pythondef square_root(num):return num ** 0.5result = square_root(25)print(result)```16.将一个字符串中的单词逆序排列```pythondef reverse_words(string):words = string.splitreversed_words = " ".join(words[::-1]) return reversed_wordsresult = reverse_words("Hello World") print(result)``````pythondef sum_odd_numbers(numbers):return sum([num for num in numbers if num % 2 != 0])numbers = [1, 2, 3, 4, 5]result = sum_odd_numbers(numbers)print(result)```18.判断一个字符串是否为回文数字(从左向右和从右向左读都一样)```pythondef is_palindrome_number(num):string = str(num)reversed_string = string[::-1]if string == reversed_string:return Trueelse:return Falseprint(result)``````pythondef find_even_numbers(numbers):return [num for num in numbers if num % 2 == 0]numbers = [1, 2, 3, 4, 5]result = find_even_numbers(numbers)print(result)```20.删除一个字符串中的所有空格```pythondef remove_spaces(string):return string.replace(" ", "")result = remove_spaces("Hello World")print(result)```21.将一个字符串中的大写字母转换为小写字母,小写字母转换为大写字母```pythondef convert_case(string):return string.swapcaseresult = convert_case("Hello World") print(result)```22.将一个列表中的元素按照相反的顺序排列```pythondef reverse_order(lst):lst.reversereturn lstnumbers = [1, 2, 3, 4, 5]result = reverse_order(numbers)print(result)```23.计算一个数的立方```pythondef cube(num):return num ** 3result = cube(2)print(result)```24.循环打印一个字符串指定的次数```pythondef print_string(string, count):for _ in range(count):print(string)print_string("Hello", 3)```25.计算列表中所有元素的乘积```pythondef multiply_elements(numbers): result = 1for num in numbers:result *= numreturn resultnumbers = [1, 2, 3, 4, 5]result = multiply_elements(numbers) print(result)```26.查找一个字符串中的所有子字符串```pythondef find_substrings(string):substrings = []for i in range(len(string)):for j in range(i + 1, len(string) + 1): substrings.append(string[i:j])return substringsresult = find_substrings("abc")print(result)```27.将一个列表中的元素合并为一个字符串```pythondef merge_elements(lst):return "".join(lst)elements = ["a", "b", "c"]result = merge_elements(elements)print(result)```28.将一个字符串中的所有单词首字母大写```pythondef capitalize_words(string):words = string.splitcapitalized_words = [word.capitalize( for word in words] return " ".join(capitalized_words)result = capitalize_words("hello world")print(result)```29.计算圆的面积```pythonimport mathdef calculate_circle_area(radius):return math.pi * radius ** 2result = calculate_circle_area(5)print(result)```30.使用递归计算斐波那契数列的第n项```pythondef fibonacci(n):if n <= 0:return "Input should be a positive integer." elif n == 1:return 0elif n == 2:return 1else:return fibonacci(n - 1) + fibonacci(n - 2) result = fibonacci(6)print(result)```这些案例代码大致有1200多字。

python里lambda表达式用法

python里lambda表达式用法

python里lambda表达式用法摘要:mbda 表达式的定义与特点mbda 表达式的语法mbda 表达式的使用场景mbda 表达式与函数的比较mbda 表达式的优缺点正文:mbda 表达式的定义与特点在Python 编程语言中,Lambda 表达式是一种简洁的、能够定义在一行代码内的匿名函数。

Lambda 表达式主要用于需要一个小型函数的场景,例如对列表进行排序或过滤等。

Lambda 表达式的特点是:定义简单、使用方便、功能强大。

mbda 表达式的语法Lambda 表达式的基本语法为:lambda arguments: expression。

其中,arguments 表示传入的参数,expression 表示执行的操作。

例如,定义一个计算平方的Lambda 表达式可以写作:lambda x: x**2。

mbda 表达式的使用场景Lambda 表达式可以用于各种需要函数的场景,例如:- 排序:使用sorted() 函数对列表进行排序时,可以提供一个Lambda 表达式作为键函数。

例如,对一个列表中的元组按第二个元素进行排序可以写作:sorted(data, key=lambda x: x[1])。

- 过滤:使用list() 函数对列表进行过滤时,可以提供一个Lambda 表达式作为条件。

例如,筛选出一个列表中的偶数可以写作:list(filter(lambda x: x % 2 == 0, numbers)))。

- 映射:使用map() 函数对列表进行映射时,可以提供一个Lambda 表达式作为变换函数。

例如,将一个列表中的每个元素平方可以写作:list(map(lambda x: x**2, numbers))。

mbda 表达式与函数的比较Lambda 表达式与普通函数在某些方面有相似之处,但也存在一些不同。

与普通函数相比,Lambda 表达式更简洁、定义更简单,但它的功能有限,只能包含一个表达式,且不能有复杂的逻辑控制结构。

Python之lambda函数完整详解巧妙运用

Python之lambda函数完整详解巧妙运用

Python之lambda函数完整详解巧妙运⽤⼀、前⾔lambda 函数在 Python 编程语⾔中使⽤频率⾮常⾼,使⽤起来⾮常灵活、巧妙;那么,什么是lambda ?它有哪些⽤法和应⽤场景呢?下⾯让我⼀起来解读 lambda的神秘之处!⼆、lambda 语法lambda 函数的语法只包含⼀个语句,表现形式如下:lambda [arg1 [,arg2,.....argn]]:expression其中,lambda 是 Python 预留的关键字,[arg…] 和 expression 由⽤户⾃定义。

具体介绍如下:[arg…] 是参数列表,它的结构与 Python 中函数(function)的参数列表是⼀样的。

[arg…] 可以有⾮常多的形式。

例如:a, ba=1, b=2*args**kwargsa, b=1, *argsexpression 是⼀个参数表达式,表达式中出现的参数需要在[arg......]中有定义,并且表达式只能是单⾏的,只能有⼀个表达式。

以下都是合法的表达式:1Nonea + bsum(a)1 if a >10 else 0三、lambda 特性lambda 函数是匿名的:所谓匿名函数,通俗地说就是没有名字的函数。

lambda函数没有名字。

lambda 函数有输⼊和输出:输⼊是传⼊到参数列表argument_list的值,输出是根据表达式expression计算得到的值。

lambda 函数拥有⾃⼰的命名空间:不能访问⾃⼰参数列表之外或全局命名空间⾥的参数,只能完成⾮常简单的功能。

常见的lambda函数⽰例:lambda x, y: x*y # 函数输⼊是x和y,输出是它们的积x*ylambda:None # 函数没有输⼊参数,输出是Nonelambda *args: sum(args) # 输⼊是任意个数参数,输出是它们的和(隐性要求输⼊参数必须能进⾏算术运算)lambda **kwargs: 1 # 输⼊是任意键值对参数,输出是1四、lambda 常见⽤法由于lambda语法是固定的,其本质上只有⼀种⽤法,那就是定义⼀个lambda函数。

用python画圣诞树三种代码示例介绍

用python画圣诞树三种代码示例介绍

⽤python画圣诞树三种代码⽰例介绍⽬录前⾔1.⽅块圣诞树2.线条圣诞树3.豪华圣诞树总结前⾔这篇⽂章主要介绍了使⽤Python画了⼀棵圣诞树的实例代码,本⽂通过实例代码给⼤家介绍的⾮常详细,对⼤家的学习或⼯作具有⼀定的参考借鉴价值,需要的朋友可以参考下如何⽤python画⼀个圣诞树呢?Turtle库来画圣诞树。

1.⽅块圣诞树1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import turtlescreen = turtle.Screen()screen.setup(375, 700)circle = turtle.Turtle()circle.shape('circle')circle.color('red')circle.speed('fastest')circle.up()square = turtle.Turtle()square.shape('square')square.color('green')square.speed('fastest')square.up()circle.goto(0, 280)circle.stamp()k = 0for i in range(1, 13):y = 30 * ifor j in range(i - k):x = 30 * jsquare.goto(x, -y + 280)square.stamp()square.goto(-x, -y + 280)square.stamp()if i % 4 == 0: x = 30 * (j + 1) circle.color('red') circle.goto(-x, -y + 280) circle.stamp() circle.goto(x, -y + 280) circle.stamp()k += 3if i % 4 == 3:x = 30 * (j + 1)circle.color('yellow')circle.goto(-x, -y + 280)circle.stamp()circle.goto(x, -y + 280) circle.stamp()square.color('brown')for i in range(13, 17): y = 30 * i for j in range(2): x = 30 * j square.goto(x, -y + 280) square.stamp()square.goto(-x, -y + 280)square.stamp()2.线条圣诞树123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18import turtle# 定义圣诞树的绿叶函数def tree(d, s):if d <=0:returnturtle.forward(s)tree(d -1, s *.8)turtle.right(120)tree(d -3, s *.5)turtle.right(120)tree(d -3, s *.5)turtle.right(120)turtle.backward(s)n =100""" 设置绘图速度'fastest' : 0'fast' : 10192021222324252627282930313233343536373839404142'normal' : 6'slow' : 3'slowest' : 1"""turtle.speed('fastest') # 设置速度turtle.left(90)turtle.forward(3 * n)turtle.color("orange", "yellow")turtle.left(126)# turtle.begin_fill()for i in range(5):turtle.forward(n / 5)turtle.right(144)turtle.forward(n / 5)turtle.left(72)turtle.end_fill()turtle.right(126)turtle.color("dark green")turtle.backward(n * 4.8)# 执⾏函数tree(15, n)turtle.backward(n / 5)3.豪华圣诞树1 2 3 4 5 67 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 61import turtle as t #as就是取个别名,后续调⽤的t都是turtlefrom turtle import*import random as rimport timen =100.0speed("fastest") #定义速度screensize(bg='black') #定义背景颜⾊,可以⾃⼰换颜⾊left(90)forward(3*n)color("orange", "yellow")#定义最上端星星的颜⾊,外圈是orange,内部是yellowbegin_fill()left(126)for i in range(5): #画五⾓星forward(n/5)right(144) #五⾓星的⾓度forward(n/5)left(72) #继续换⾓度end_fill()right(126)def drawlight():#定义画彩灯的⽅法if r.randint(0, 30) ==0:#如果觉得彩灯太多,可以把取值范围加⼤⼀些,对应的灯就会少⼀些 color('tomato')#定义第⼀种颜⾊circle(6)#定义彩灯⼤⼩elif r.randint(0,30) ==1:color('orange')#定义第⼆种颜⾊circle(3)#定义彩灯⼤⼩else:color('dark green')#其余的随机数情况下画空的树枝color("dark green")#定义树枝的颜⾊backward(n*4.8)def tree(d, s):#开始画树if d <=0: returnforward(s)tree(d-1, s*.8)right(120)tree(d-3, s*.5)drawlight()#同时调⽤⼩彩灯的⽅法right(120)tree(d-3, s*.5)right(120)backward(s)tree(15, n)backward(n/2)for i in range(200):#循环画最底端的⼩装饰a =200-400*r.random()b =10-20*r.random()up()forward(b)left(90)forward(a)down()if r.randint(0, 1) ==0:color('tomato')626364656667686970717273747576777879808182838485868788899091929394else:color('wheat')circle(2) up() backward(a)right(90)backward(b)t.color("dark red","red")#定义字体颜⾊t.write("Merry Christmas",align ="center",font=("Comic Sans MS",40,"bold"))#定义⽂字、位置、字体、⼤⼩ def drawsnow():#定义画雪花的⽅法 t.ht() #隐藏笔头,ht=hideturtle t.pensize(2) #定义笔头⼤⼩for i in range(200): #画多少雪花t.pencolor("white") #定义画笔颜⾊为⽩⾊,其实就是雪花为⽩⾊t.pu() #提笔,pu=penup t.setx(r.randint(-350,350)) #定义x 坐标,随机从-350到350之间选择 t.sety(r.randint(-100,350)) #定义y 坐标,注意雪花⼀般在地上不会落下,所以不会从太⼩的纵座轴开始 t.pd() #落笔,pd=pendowndens = 6 #雪花瓣数设为6snowsize = r.randint(1,10) #定义雪花⼤⼩for j in range(dens): #就是6,那就是画5次,也就是⼀个雪花五⾓星#t.forward(int(snowsize)) #int ()取整数t.fd(int(snowsize))t.backward(int(snowsize)) #t.bd(int(snowsize)) #注意没有bd=backward ,但有fd=forward ,⼩bug t.right(int(360/dens)) #转动⾓度drawsnow()#调⽤画雪花的⽅法t.done() # 完成,否则会直接关闭总结到此这篇关于⽤python画圣诞树三种代码⽰例介绍的⽂章就介绍到这了,更多相关python画圣诞树内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

kruskal算法(克鲁斯卡尔算法)python代码

kruskal算法(克鲁斯卡尔算法)python代码

Kruskal算法(克鲁斯卡尔算法)Python代码简介K r us ka l算法是一种用于解决最小生成树问题的贪心算法。

它通过逐步选择边,将未连接的顶点逐渐合并成一个连通分量,并且保证最后形成的树中不会出现环。

本文将介绍K ru sk al算法的基本思想及其在Py th on 中的实现。

算法原理K r us ka l算法的基本思想是将图的所有边按照权重(即边的长度)从小到大进行排序,然后逐条选择边,并判断是否会形成环。

如果不会形成环,则将该边加入最小生成树中,直到最小生成树的边数等于节点数减一为止。

算法步骤1.根据图的边的权重进行排序。

2.初始化一个空的最小生成树列表,用于存放已选择的边。

3.初始化一个空的并查集,用于判断边的端点是否已经在同一个连通分量中。

4.遍历排序后的边,对于每一条边:-判断边的两个端点是否已经在同一个连通分量中,如果不在,将该边加入最小生成树列表,并将边的两个端点合并到同一个连通分量中。

5.返回最小生成树列表作为最终的生成树。

Pytho n实现下面是使用P yt ho n实现Kr us ka l算法的代码:c l as sU ni on Fi nd:d e f__i ni t__(se lf,n):s e lf.p ar en t=li st(r an ge(n))s e lf.r an k=[0]*nd e ff in d(se lf,x):i f se lf.p ar en t[x]!=x:s e lf.p ar en t[x]=se l f.fi nd(s el f.par e nt[x]) r e tu rn se lf.p ar ent[x]d e fu ni on(s el f,x,y):r o ot_x,r oo t_y=sel f.f in d(x),s el f.f i nd(y) i f ro ot_x!=ro ot_y:i f se lf.r an k[ro ot_x]>se lf.r an k[roo t_y]:s e lf.p ar en t[ro ot_y]=ro ot_xe l se:s e lf.p ar en t[ro ot_x]=ro ot_yi f se lf.r an k[ro ot_x]==s el f.ra nk[ro o t_y]: s e lf.r an k[ro ot_y]+=1d e fk ru sk al(g ra ph):e d ge s=[]f o ri,r ow in en um era t e(gr ap h):f o rj,c os ti ne nu mer a te(r ow):e d ge s.ap pe nd((cos t,i,j))e d ge s.so rt()n u m_no de s=le n(gra p h)t r ee=[]u n io n_fi nd=U ni onF i nd(n um_n od es)f o rc os t,i,ji ne dge s:i f un io n_fi nd.f ind(i)!=un io n_fi nd.f in d(j):u n io n_fi nd.u ni on(i,j)t r ee.a pp en d((i,j))r e tu rn tr ee使用示例为了更好地理解K rus k al算法的实现,下面给出一个使用示例:构建图的邻接矩阵表示g r ap h=[[0,2,3,1],[2,0,0,4],[3,0,0,5],[1,4,5,0]]使用Kruskal算法计算最小生成树m i ni mu m_sp an ni ng_t re e=kr us ka l(gra p h)输出最小生成树的边f o re dg ei nm in im um_s pa nn in g_tr ee:p r in t(ed ge)输出结果为:(0,3)(0,1)(1,0)总结K r us ka l算法是一种高效的求解最小生成树问题的算法。

语法树解析 python

语法树解析 python

语法树解析python在自然语言处理领域,语法树发挥着至关重要的作用。

它是句子结构的一种树状表示,能帮助我们更好地理解句子的语法结构和意义。

Python作为一门流行的编程语言,拥有丰富的自然语言处理库,可以方便地进行语法树的解析。

本文将详细介绍如何使用Python进行语法树解析。

一、什么是语法树?语法树(Syntax Tree),又称作句法树,是源代码、自然语言句子等结构的一种抽象语法结构的树状表示。

在自然语言处理中,语法树能够清晰地展示句子的成分结构,如主语、谓语、宾语等,以及它们之间的关系。

二、Python中的语法树解析在Python中,可以使用自然语言处理库(如NLTK、spaCy等)进行语法树的解析。

以下以NLTK库为例,介绍如何实现语法树的解析。

1.安装NLTK库首先,需要安装NLTK库。

在命令行执行以下命令:```pip install nltk```2.使用NLTK解析语法树(1)导入所需模块```pythonimport nltkfrom nltk import CFGfrom nltk.parse import ChartParser```(2)定义语法规则使用上下文无关文法(CFG)定义语法规则。

```pythongrammar = CFG.fromstring("""S -> NP VPVP -> V NPNP -> "I" | "you"V -> "love"""")```(3)创建解析器```pythonparser = ChartParser(grammar)```(4)解析句子将句子转换为词列表,然后使用解析器进行解析。

```pythonsentence = "I love you".split()trees = list(parser.parse(sentence))```(5)显示语法树```pythonfor tree in trees:tree.pretty_print()```三、总结通过使用Python中的自然语言处理库,如NLTK,我们可以方便地进行语法树的解析。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

毕达哥拉斯树与python代码
这棵树叫“毕达哥拉斯树”(Pythagorean Tree)。

因为它是相对勾股定理而言的,我们也可以称之为“勾股树”。

作者使用了Python 的“PYX package”来产生图片,然后用GIMP产生动太的GIF。

下面是作者公布的一个简化了的程序:
from math import acos, sin, cos, pi, sqrt
from pyx import *
import os
def draw_layer(color):
global c
for square in layer:
if square[1] > .0001:
c.stroke(rect, [ deco.filled([color]), color,
trafo.translate(square[0][0],square[0][1]) *
trafo.rotate(square[2]*180/pi) *
trafo.scale(square[1]) ])
def next_left():
return set( [ ((t[0]-s*sin(r), t[1]+s*cos(r)), s*ls, r+theta ) for (t,s,r) in layer ] )
def next_right():
return set( [ ((t[0]+s*(ls*cos(r+theta)-sin(r)),
t[1]+s*(cos(r)+ls*sin(r+theta))),
s*rs, r-phi )
for (t,s,r) in layer ] )
if __name__ == "__main__":
## INITIALIZE
N = 15 # NUMBER OF LAYERS
imgname = 'Ptree_7-7' # IMAGE NAME
ls = .7 # LEFT BRANCH SIZE
rs = .7 # RIGHT BRANCH SIZE ; ls+rs >= 1 theta = acos( (ls**2-rs**2+1) / (2*ls) )
phi = acos( (rs**2-ls**2+1) / (2*rs) )
layer = set([ ((0.0,0.0), 1.0, 0.0) ])
c = canvas.canvas()
rect = path.rect(0,0,1,1)
for i in xrange(N-1):
draw_layer(color.cmyk.RawSienna)
layer = next_left() | next_right()
print 'Layer', i+1
draw_layer(color.rgb.green)
c.writePDFfile(imgname)。

相关文档
最新文档