从零开始的python之旅(day4/day5)

news/2025/1/16 21:05:44/文章来源:https://www.cnblogs.com/Liyukio/p/18675761

从零开始的python之旅(day4)

  昨天博客园好像崩了,所以昨天晚上没写,就挪到今天来补了,昨天主要是文件操作,话不多说,上代码

  addressBook

def main():file1 = open('TeleAddressBook.txt','rb')file2 = open('EmailAddressBook.txt','rb')file1.readline()file2.readline()list1 = file1.readlines()list2 = file2.readlines()# print(list1)list1_name = []list1_tele = []list2_name = []list2_email = []for i in list1:el = i.split()list1_name.append(str(el[0].decode('gbk')))list1_tele.append(str(el[1].decode('gbk')))for i in list2:el = i.split()list2_name.append(str(el[0].decode('gbk')))list2_email.append(str(el[1].decode('gbk')))list3 = []list3.append('姓名\t    电话   \t  邮箱\n')for i in range(len(list1_name)):s = ''if list1_name[i] in list2_name:j = list2_name.index(list1_name[i])s = '\t'.join([list1_name[i],list1_tele[i],list2_email[j]])else :s = '\t'.join([list1_name[i],list1_tele[i],str('   -----   ')])s += '\n'list3.append(s)for i in range(len(list2_name)) :s = ''if list2_name[i] not in list1_name:s = '\t'.join([list2_name[i],str('   -----   '),list2_email[i]])s += '\n'list3.append(s)file3 = open('addressbook.txt','w')file3.writelines(list3)file1.close()file2.close()file3.close()if __name__ == '__main__':main()

  这段程序主要是将两个文件合并,在此处没啥问题,可以看看day5差不多类似代码,换种方法读入

  CountOccurencesOfWords

import turtlecount = 10
data = []
words = []
yScale = 12
xScale = 35
def drawLine(p,x1,y1,x2,y2):p.penup()p.goto(x1,y1)p.pendown()p.goto(x2,y2)def drawText(p,x,y,text):p.penup()p.goto(x,y)p.pendown()p.write(text)def drawRectangle(p,x,y):x = x*xScaley = y*yScaledrawLine(p,x-5,0,x-5,y)drawLine(p,x-5,y,x+5,y)drawLine(p,x+5,y,x+5,0)drawLine(p,x+5,0,x-5,0)def drawBar(p):for i in range(count):drawRectangle(p,i+1,data[i])def drawGraph(p):drawLine(p,0,0,360,0)drawLine(p,0,300,0,0)for x in range(1,count+1):drawText(p,x*xScale-4,-20,(words[x - 1]))drawText(p,x*xScale-4,data[x-1]*yScale+10,data[x-1])drawBar(p)def replacePunctuations(line):for ch in line:if ch in '~@#$%^&*()_+=<>?/.,;:{}[]|\"""':line = line.replace(ch," ")return linedef processLine(line,wordCounts):line = replacePunctuations(line)words = line.split()for word in words:if word in wordCounts:wordCounts[word] += 1else :wordCounts[word] = 1def main():file = open('article.txt','r',encoding='utf-8')wordCounts = {}for i in file:processLine(i.lower(),wordCounts)pairs = list(wordCounts.items())items = [[x,y] for (y,x) in pairs]items.sort()for i in range(len(items) - 1,len(items) - count - 1,-1):print(items[i][1] + '\t' + str(items[i][0]))data.append(items[i][0])words.append(items[i][1])file.close()turtle.title('词频结果柱状图')turtle.setup(900,750,0,0)p = turtle.Turtle()p.hideturtle()p.width(3)drawGraph(p)if __name__ == '__main__':main()

  在这段程序中,读取文章内容(英文)然后转化大小写等等一系列操作后,统计单词出现频率然后利用turtle画出来。

  drawDay

import turtle
from turtle import Turtle
rulues = {0: [1, 1, 1, 0, 1, 1, 1],1: [0, 0, 1, 0, 0, 0, 1],2: [0, 1, 1, 1, 1, 1, 0],3: [0, 1, 1, 1, 0, 1, 1],4: [1, 0, 1, 1, 0, 0, 1],5: [1, 1, 0, 1, 0, 1, 1],6: [1, 1, 0, 1, 1, 1, 1],7: [0, 1, 1, 0, 0, 0, 1],8: [1, 1, 1, 1, 1, 1, 1],9: [1, 1, 1, 1, 0, 0, 1]
}
def makedraw(p,x):#可以利用规律减少代码量,半欧拉图,从左侧中部开始画pending = rulues.get(x)p.penup()if(pending[0]):p.pendown()p.fd(50)p.right(90)p.penup()if (pending[1]):p.pendown()p.fd(50)p.right(90)p.penup()if (pending[2]):p.pendown()p.fd(50)p.penup()if (pending[3]):p.pendown()p.right(90)p.fd(50)p.penup()if (pending[4]):p.pendown()p.left(90)p.fd(50)p.penup()if (pending[5]):p.pendown()p.left(90)p.fd(50)p.penup()if (pending[6]):p.pendown()p.left(90)p.fd(50)p.penup()def draw(x):turtle.setworldcoordinates(-20,-500,700,500)p = Turtle()p.pensize(5)p.hideturtle()p.color('red')p.speed(5)p.penup()p.left(90)xx = int(-70)for i in range(len(x)):xx += 80p.goto(xx,0)if i == 4:p.goto(xx-15,0)p.write('年', font=("Arial", 15, "normal"))p.goto(xx+15,0)p.color('green')elif i == 6:p.goto(xx-15,0)p.write('月', font=("Arial", 15, "normal"))p.goto(xx+15,0)p.color('blue')makedraw(p,int(x[i]))xx += 80p.goto(xx - 15, 0)p.write('日', font=("Arial", 15, "normal"))p.goto(xx + 15, 0)turtle.done()
def main():yearmonthday = input('输入年月日(例如20250101,如不满八位,用0补满八位)\n')draw(yearmonthday)main()

  这一部分则是昨天作业,

  route

import turtledef main():turtle.title('数据驱动的动态路径绘制')turtle.setup(800,600,0,0)p = turtle.Turtle()p.color('red')p.width(5)p.shape('turtle')p.speed(5)result = []file = open('data.txt','r')for i in file:result.append(list(map(float,i.split(','))))print(result)for i in range(len(result)):p.color(result[i][3:6])p.fd(result[i][0])if result[i][1] :p.right(result[i][2])else :p.left(result[i][2])p.goto(0,0)file.close()if __name__ == '__main__':main()

  day4主要是,文件处理和turtle库的进阶。文件处理时,还是要注意,encoding和decode的类型类型选择。其他的没啥了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870296.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍1个简单好用的英文文本翻转网站,关键还免费不用登录

输入英文,会 生成对应的翻转、反向、镜像、𝕆𝕦𝕥𝕝𝕚𝕟𝕖 𝔽𝕠𝕟𝕥、𝓒𝓾𝓻𝓼𝓲𝓿𝓮 𝓛𝓮𝓽𝓽𝓮𝓻𝓼的文本可以用于生成密码,聊天时发消息,猜字符的场景,欢迎使用和访问,简单免费,无需登录 比如你想她啦,不好意思说…

[Babel] Intro Babel - 01 Introduction

Babel介绍 Babel 是一个编译器,主要用于将最新的 JavaScript 代码转化为向后兼容的代码,以便在老版本的浏览器或环境中运行。 例如,你可能在开发时使用了 ES6、ES7 或者更高级的 JavaScript 特性,但是有些浏览器可能并不支持这些新特性,这时就可以用 Babel 来将代码转化为…

Babel Intro Babel - 01 Introduction

Babel介绍 Babel 是一个编译器,主要用于将最新的 JavaScript 代码转化为向后兼容的代码,以便在老版本的浏览器或环境中运行。 例如,你可能在开发时使用了 ES6、ES7 或者更高级的 JavaScript 特性,但是有些浏览器可能并不支持这些新特性,这时就可以用 Babel 来将代码转化为…

unordered_map-STL容器

时间复杂度和空间复杂度

2 应用层

2 应用层 2.1 网络应用原理 网络应用:能够运行在不同的端系统和通过网络彼此通信的程序。注:在端系统上运行,而不是在网络核心上运行。网络应用是计算机网络存在的理由。 2.1.1 应用体系结构(application architecture) 客户-服务器体系结构(client-server architecture)…

【内网穿透】概念、原理与实现方法

一、内网穿透简介 内网穿透是一种网络技术,它允许外部网络(如互联网)上的设备访问位于内部网络(例如公司或家庭局域网LAN)中没有直接公网IP地址的设备。这对于远程办公、云服务接入以及物联网设备管理等场景至关重要。 二、工作原理 内网穿透主要依赖于NAT(网络地址转换)…

数字电路课程笔记

1、数制与码制 补零 二进制和十六进制之间的转换: 整数部分:对于整数部分,您需要将二进制数从右往左,每四位一组。如果剩余的位数不足四位,就需要在左边补零,直到每组都有四位。小数部分:对于小数部分,您需要将二进制数从左往右,每四位一组。如果剩余的位数不足四位,…

unity里生成的.csproj和.sln :assembly definition

有一段时间一直没明白为啥有的时候第三方的package里的代码没法引用我们项目的,最近有点心得,记录下: 在创建unity项目的时候默认是创建一个解决方案就是以.sln为结尾的。默认开发时都在同一个解决项目里,所以不会出现相互引用不到的问题。当我们引用到第三方的package时就…

【前端框架】2025 React 状态管理终极指南!

全文约 10800 字,预计阅读需要 30分钟。 React 作为当下最受欢迎的前端框架,在构建复杂且交互丰富的应用时,状态管理无疑是至关重要的一环。从简单的本地状态,到能让多个组件协同工作的全局状态,再到涉及服务器通信、导航切换、表单操作以及持久化存储等不同场景下的状态管…

【搜索】多源BFS专题

跳马(多源BFS变种,每个起点有步数限制)补充几个测试样例 输入 3 2 . . 2 . . .输出 0输入 3 5 4 7 . 4 8 4 7 4 4 . 7 . . . .输出 17输入 3 4 . . . . . 2 . . . . . .输出 0输入 3 4 . . . . . 2 2 . . . . .输出 -1本题很坑爹的地方在于,输入的字符串还用空格分开,所以…

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交、142.环形链表II

9-24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:he…

2025 省选模拟 6

2025 省选模拟 6 A.圣诞树 DP,计数题 考虑题目题目的两个限制相邻两层彩球颜色集合不同同层相邻两个彩球颜色不同发现求出每一行恰好 \(j\) 个颜色后第二个限制很简单就解决了。 设 \(f_{i,j}\) 表示长度为 \(i\) 时恰好有 \(j\) 个颜色的方案数(对于一行考虑) 设 \(g_{i,j}…