需求:根据脚本绘制图形
1.问题分析
2."自动轨迹绘制"实例讲解
2.1 基本思路
2.2 数据接口定义
R | G | B | 颜色 |
0 | 0 | 0 | 黑色 |
0 | 0 | 1 | 蓝色 |
0 | 1 | 0 | 绿色 |
0 | 1 | 1 | 青色 |
1 | 0 | 0 | 红色 |
1 | 0 | 1 | 深红色 |
1 | 1 | 0 | 黄色 |
1 | 1 | 1 | 白色 |
2.3 文件接口代码
Python:zip() 函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
语法:
zip([iterable, ...])
参数说明:
- iterabl -- 一个或多个迭代器;
返回值:返回元组列表
x_s = [1, 2, 3] y_s = [3, 2, 1] result=list() for x,y in zip(x_s,y_s): result.append(x+y) print(result)
>>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素个数与最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式 [(1, 2, 3), (4, 5, 6)]
python:map的使用方法
1.map()
map(function, args)
2.内置函数str():
str()是python的内置函数,这个例子是把列表/元组/字符串的每个元素变成了str类型,然后以列表的形式返回。
a=list(map(str,'python')) print(a)
3.1.自定义函数
def add(x,y): return x+y list1=[1,2,3] list2=[4,5,6] a=list(map(add,list1,list2)) print(a)
3.2.自定义函数(如果三个列表长度不一样):
def add(x,y): return x,y list1 = [1,2,3] list2 = [1,2,3,4] a = list(map(add, list1, list2)) print(a)
4.map()函数对序列
args
中的每个值进行相同的function
操作,最终得到一个结果序列。
map()
可以让我们使用一种简单且优雅得多的方式实现。x_s = [1, 2, 3] y_s = [3, 2, 1] #对序列x_s和y_s中的对应元素进行相加 a=map(lambda x,y:x+y,x_s,y_s)
5.map()
函数生成的结果序列不会把全部结果显示出来,要想获得结果序列,可以使用list()方法。6
.map()
不仅可用于一列表的输入,甚至可以用于一列表的函数。x_s = [1, 2, 3] y_s = [3, 2, 1] #对序列x_s和y_s中的对应元素进行相加 a=map(lambda x,y:x+y,x_s,y_s) def multiply(x, y): return (x * y) def add(x, y): return (x + y) funcs = [multiply,add]#包含两个函数的列表 for x,y in zip(x_s,y_s): value = map(lambda f: f(x, y), funcs) print(list(value))
出现错误:
错误的原因是因为,所创建的data.txt文件多了一行,将这个空白行删掉即就可以得出相应结果。
import turtle as t
#储备
t.title("自动轨迹绘制")
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)
#数据读取
datals=list()
f=open("C:/Users/吉祥瑞/Desktop/python/UNIT 7/data.txt",encoding="UTF-8")
for line in f:#获取的为字符串
line=line.replace("\n","")#换行符转换为空字符串,string.replace(old_string,a,new_string)
datals.append(list(map(eval,line.split(","))))
f.close()
#自动绘制
for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.right(datals[i][2])
else:
t.left(datals[i][2])
data.txt
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
结果:
3."自动轨迹绘制"举一反三