Python学习
宁宁Fingerstyle
尺璧非宝,寸阴是竞。
展开
-
Python实现百钱买百鸡
一、问题描述《算经》中有一道很有趣的数学题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?转化为数学语言,也就是我们要找到三个不大于100的非负整数x,y,z,满足x+y+z=100,并且5x+3y+z/3=100.二、普通解法很容易想到使用嵌套的for循环来搜索合适的三个变量。代码如下:for rooster in range(101): for hen in range(101): for chick in range(10原创 2021-02-16 14:34:50 · 32638 阅读 · 15 评论 -
Python的海龟绘图库turtle中tracer(False)和speed(0)的区别
一、问题描述turtle是一个又简单又有趣的画图工具,很多刚开始接触Python编程的小伙伴都会用turtle画一些简单的图形。为了让turtle画得快一些,我们可以使用speed(0)来把它的速度调到最高,也可以使用tracer(False)关闭它的轨迹,画好之后再使用update()来更新画面。如果只是给一个简单的图形绘制加速,这两种方法都可以使用。那么它们在什么情况下会表现出巨大的差异呢?二、具体解释我们知道,小海龟画图的方式就是在画布上爬来爬去,它走过的地方会留下它的“脚印”,连贯的脚印原创 2020-10-21 12:47:58 · 23669 阅读 · 15 评论 -
Python中使用unittest做单元测试时如何优雅地处理input
一、问题描述假设我们有下面的一个函数需要接受测试:def add_3(num): return 3 + num上面这个函数就是把给定的参数加上3,然后返回。用unittest来做测试非常简单,代码如下:import unittestfrom operation import add_3class TestOperation(unittest.TestCase): def test_add_3(self): # 断言add_3(5)的返回值是8原创 2020-08-06 16:51:58 · 2073 阅读 · 2 评论 -
Python内置函数getattr的使用场景
一、getattr函数的作用是什么?在Python交互式的help环境下,输入getattr,回车,会得到下面的信息:阅读上图的信息,我们对getattr函数可以有如下认识:它接受两个位置参数——object和name,还接受一个可选参数——default 参数object是一个对象 参数name的类型是字符串,它是对象object的属性名字 如果我们有一个对象叫alex,他有一个属性是age,那么getattr(alex,'age')得到的结果和alex.age是一样的 如果我们不原创 2020-07-31 17:33:31 · 3463 阅读 · 0 评论 -
Windows上用Pyinstaller打包带有媒体文件的Pygame项目的注意事项
一、问题描述之前只用pyinstaller打包过tkinter项目,很顺利,这次打包pygame就出了问题。打包出的exe文件双击后闪退,为了看到错误消息,我取消了-w选项,于是就在控制台看到了以下消息:可以看到,无法找到我的字体文件。其实不止是字体文件,我游戏中的背景音乐和音效都找不到。这是因为打包的时候没有指定添加媒体文件。二、解决方法pyinstaller提供了--add-data选项来手动添加要一并打包的文件,这个选项可以多次使用。比如,有一个游戏项目的目录结构如下:>原创 2020-07-19 14:37:25 · 1296 阅读 · 4 评论 -
如何在Windows10上使用celery
一、问题描述我在windows10上开发Django项目时需要使用celery异步发送邮件, 安装的celery是4.4.2版本,使用的message broker是RabbitMQ3.8.5,在配置好了celery,写好了tasks.py文件后,使用以下命令启动celery:celery -A myshop worker -l log到目前为止一切正常。然而,在我的网站执行了需要发送邮件的操作后,celery虽然显示接收到了任务,却一直不执行。重启多次celery和rabbitmq也没有效原创 2020-06-22 11:24:36 · 5211 阅读 · 11 评论 -
自定义模型类使得django-taggit支持中文标签
一、问题描述django-taggit是一个很好的给文章打标签的应用,但是它的模型存储的标签默认是只支持ascii的slug,不支持中文。为了让其支持中文,我们不能直接使用Tag模型类,而是应该自定义模型类。当然,这个自定义并不是从零开始,而是继承它提供的基类。二、代码实现说明:下面的基于Django3 by Example里的博客项目,但是我没有把全部代码写全,只写了我实现的自定义taggit模型类支持中文的部分。对此项目感兴趣的朋友可以自行阅读书籍。models.pyfrom ta原创 2020-06-02 20:06:01 · 924 阅读 · 2 评论 -
Pandas函数read_csv的参数na_values的用法
一、问题描述我们使用Pandas的read_csv函数读取csv文件的时候,缺失的数据总是会自动填充为NaN.什么样的值会被认为是缺失的数据呢?我们能不能提供一些个性化的缺失数据?这就要用到na_values参数。下面将介绍这个参数。二、na_values参数的用法我们有一个文件叫comments.csv,如果普通读入,得到的结果如下图所示:这份数据看起来很完整,没有缺失的值。但是行索引为1的用户的年龄是0,这是不合理的,所以我们也想把它看成缺失值,希望它能变成NaN.这时候我们就可以使原创 2020-05-11 15:11:37 · 19057 阅读 · 14 评论 -
Python递归实现枚举组合(从n个不重复的元素中选出r个)
一、问题描述在数学上,我们经常遇到这样的问题:有编号分别为1,2,3,4,5的5个小球,从中选出3个,有多少种组合?利用数学公式,我们可以很方便地算出组合的数量。那么如何通过编程来枚举这些组合呢?也就是说,我们希望得到[1,2,3],[2,3,4]……这样的结果。当然,已经有现成的API能够帮助我们实现这个需求。接下来,我们就看看如何利用递归,自己写出这样一个用于枚举组合的函数。二、代码实...原创 2020-02-11 13:18:56 · 3962 阅读 · 0 评论 -
Flask报错RuntimeError: Working outside of application context.的解决
一、问题描述我有一个这样的需求:我在一个forms.py模块中建立了一个表单类,类中的一个表单域是SelectField,而它的选项(choices)是我数据库中所有老师的列表。为了获取这个列表,我需要每次都从数据库中查询一遍。为了使我的代码清晰,我在tools文件夹中单独创建了一个teacher_list模块,在里面写上了查询并获取teacher_list的代码,然后把teacher...原创 2020-01-28 20:52:38 · 5668 阅读 · 3 评论 -
Python实现向链表头部和尾部添加节点(复杂度都是O(1))
一、图解添加头结点比较简单,因为链表的头结点很容易获取。如下图:向尾部添加节点,一般会想到遍历,但是如果我们能始终跟踪当前链表的尾结点,那么向尾部添加节点就和向头部添加一样简单了。如下图:二、代码实现class Node: '''节点类''' def __init__(self,val): '''初始化方法 :参数 val...原创 2019-12-25 20:06:38 · 2638 阅读 · 0 评论 -
Python中用for循环一次性给单向链表添加多个节点
目录一、链表的Python实现二、一个一个地添加节点,生成链表三、用for循环一次性添加多个节点,生成链表一、链表的Python实现class ListNode: '''这是链表类''' def __init__(self,x): # val属性是当前节点的值 self.val = x # next属性是下一个节...原创 2019-12-20 14:47:19 · 1377 阅读 · 2 评论 -
json序列化时,如何定制支持datetime类型?
一、json序列化时默认支持的数据类型 Python JSON dict object list, tuple array str string int, float, int- & float-derived E...原创 2019-12-02 20:45:23 · 1955 阅读 · 0 评论 -
Python实现时间复杂度为O(n²)和O(n)的查找列表中最小值算法
一、 具体要求:二、 两种实现1. 时间复杂度为O(n²)这里的n代表列表里的元素个数,当我们用列表里的每个元素和其他所有元素比较的时候,我们就需要比较n的平方次才能找到最小值。def getMin(source_list): #两层循环,数量级是n² for i in range(len(source_list)): for j in r...原创 2019-11-19 12:33:22 · 1393 阅读 · 0 评论 -
Python实现用户输入年月日,程序打印出这是这一年的第多少天
1. 自己造轮子year=int(input('请输入年份,如2019>>>'))month=int(input('请输入月份,如8>>>'))day=int(input('请输入日期,如25>>>'))#下面这块代码是按照闰年计算if (year%4==0 and year%100!=0) or (year%400==0):...原创 2019-04-09 10:50:19 · 14245 阅读 · 0 评论 -
用Python的turtle模块画一个钟表的表盘(内含效果图)
turtle模块很可爱,用来画一些规律性强的图形很容易上手。下面的代码向大家展示了如何绘制一个钟表的表盘:import turtle#实例化一个屏幕对象screen=turtle.Screen()#把屏幕的背景颜色设置为黄色screen.bgcolor('yellow')#实例化一个小乌龟,命名为baby,这也就是我们的画笔baby=turtle.Turtle()#把画笔的...原创 2019-08-19 14:53:02 · 7189 阅读 · 0 评论 -
Python以UDP数据传输方式实现非常简单的socket聊天
一、描述在这个小程序里,我们需要建立一个服务端和一个客户端。由客户端开启话题,实现你一句我一句的聊天模式。当任意一方发送q的时候,双方的对话就结束了。UDP数据传输不如TCP可靠,但是UDP的效率很高。所以这次我们用UDP的方式来实现这个小程序。二、代码实现udpserver.pyimport socket#设置ip和端口host='127.0.0.1'port=8888...原创 2019-08-10 14:07:33 · 773 阅读 · 0 评论 -
Flask从数据库中查询数据的filter和filter_by()方法的区别
一、问题描述Flasky查询数据的时候,会需要用到过滤器来根据一定的条件筛选。其中,有两个方法filter和filter_by看起来很像,那么它们的区别是什么呢?二、对比官方文档是这样写的:Query.filter()-filteron SQL expressions.Query.filter_by()-filteron keyword expressions....原创 2019-08-14 17:03:27 · 3097 阅读 · 0 评论 -
使用httpie测试web服务返回状态码308的解决方法
一、问题描述我在使用测试我的flask项目web服务时,没有按照预期返回我要的json格式的数据,而是返回了状态码308和一些提示信息。如下图所示:二、解决方法在下面的描述里面已经很详细地告诉了我们问题,问题出在了细节上。我写的路由,没有写最后的斜杠/,这在浏览器里不会出问题,浏览器会自动把斜杠补上并跳转到正确的路由,但是这里就不行了。所以如果是末尾有斜杠的路由,千万不要忘记。...原创 2019-08-17 11:48:39 · 6413 阅读 · 4 评论 -
用Python的turtle模块封装画层叠的正方形、五角星和旋涡的函数
一、效果图二、代码turtle_module.py'''这是自己写的一个小模块,里面全是封装好的用于画图的函数'''import turtledef make_window(bgcolor,title): ''' 这是一个返回自定义花布的函数 :参数 bgcolor:花布的背景颜色 :参数 title:花布的标题 '...原创 2019-08-23 13:13:36 · 2586 阅读 · 0 评论 -
flask 用Pagination类来实现分页
一、需求描述在用flask开发项目的时候,我们经常需要分页。在query对象上调用paginate方法来分页是我们非常熟悉的一种实现方式。但是,如果出于某种原因,我们需要分页的数据不是query对象,而是普通的列表,那该怎么办呢?这时候,我们可以用flask_sqlalchemy的Pagination类来完成这项工作。二、代码示例from flask import Flask,req...原创 2019-09-01 13:09:36 · 2024 阅读 · 0 评论 -
Python递归实现①把嵌套列表压平为一层列表②返回嵌套列表中某元素出现的个数③返回第n个斐波那契数
一、把嵌套列表压平为一层列表def flatten(nested_list): ''' 这是把嵌套列表压平为简单列表并返回的函数 :参数 nested_list:一个嵌套列表 ''' #先定义一个空列表,用于存储我们提出出来的元素, # 这也是最终要返回的那个列表 new_list = [] #遍历原始的嵌套列表 fo...原创 2019-09-04 17:14:30 · 814 阅读 · 0 评论 -
Python递归实现①返回一个目录下所有文件绝对路径的列表②在给定目录下的所有子目录里创建文件③删除给定目录下的所有子目录中的指定文件
一、返回一个目录下所有文件的绝对路径的列表(只关心文件,不要子目录,但是子目录里的文件也都要返回)import osdef mywalk(path): ''' 返回给定路径下所有文件的绝对路径列表,包括子目录中的文件,但是不要子目录的路径 :参数 path:绝对路径 ''' #创建一个空列表,用于存储文件的绝对路径 files_l...原创 2019-09-05 11:47:45 · 428 阅读 · 0 评论 -
Python实现博客按月份归档,并在页面上自动隐去没有创作博客的月份
需求描述:我想实现每位博主的博客按月份归档,只要是写了博客的月份,就要在页面上显示出年月以及博客数量。没有写博客的月份,就不需要显示了。最终的效果如下:2019年7月(1篇)2019年5月(3篇)上面的例子说明,该博主是从2019年5月开始写博客的,6月没写,7月写了1篇。代码实现:#假设下面的列表就是某位博主创作的全部博客,18年12月写了他的第一篇博客,19年2月写了...原创 2019-07-30 14:25:39 · 210 阅读 · 0 评论 -
Python实现打印给定的两个日期之间所有月份的列表(如2019年6月,2019年7月)
需求描述:我在开发博客的过程中想实现类似csdn的按月份给博客归档,但是我的数据库表里没有维护相关的字段,所以每个月的博客数据需要后期查询呈现。那怎么获取需要在页面显示的年月列表呢?我想要的效果如下图所示:同时,在我的数据库表里,每位博主都有一个账号注册时间的字段。所以这个问题就变成了,已知开始的时间点(该博主注册的时间)和结束的时间点(当前时间),如何打印出这个区间内所有的月份。...原创 2019-07-29 17:32:09 · 2321 阅读 · 0 评论 -
django分页器Paginator的基本使用
Paginator基础知识:说明:为了方便,这部分我没有使用QuerySet做数据源,而是用一个列表做数据源from django.core.paginator import Paginator#假设下面的列表就是我们要分页的数据,我们希望每页显示3个名字source=['黑沼爽子','风早翔太','碓氷拓海','玖兰枢','锥生零','入江直树']#实例化Paginator,...原创 2019-07-19 12:22:26 · 1090 阅读 · 0 评论 -
tempfile模块报错:PermissionError: [Errno 13] Permission denied的解决方法
问题描述:我在我的win10电脑上用python的tempfile模块的NamedTemporaryFile函数建立了一个临时文件并写入了内容,打开这个临时文件阅读却报错了,报错信息如下:PermissionError: [Errno 13] Permission denied: 'C:\\Users\\22768\\AppData\\Local\\Temp\\tmp5qk5l_6_'...原创 2019-04-22 18:31:46 · 6795 阅读 · 8 评论 -
用Python的双端队列deque实现非常简单的大富翁地图
一、双端队列简介双端队列有一个方法是rotate。可以把数据想成一个圆环,rotate能让它转起来,转多少,取决于我们给的参数。参数为正整数,那就顺时针旋转,为负整数则逆时针旋转。from collections import dequeqlist=deque([1,2,3,4])qlist.rotate(-3)#参数为负,逆时针转三步print(qlist)下面是数据旋转的...原创 2019-04-14 19:01:23 · 902 阅读 · 0 评论 -
Python实现下载图片并显示下载进度
from urllib.request import urlretrieve#这是在百度图片里找到一张图片的地址url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555478103570&di=105c8451bd007dd31fd4abc4a550f339&a...原创 2019-04-17 12:25:21 · 1692 阅读 · 0 评论 -
Python实现把列表里的数字按从小到大的顺序排列
一、自己造轮子第一种方式的思路:拿出列表里的第0个元素,把它赋给一个叫做“最小值”的变量,然后用这个变量去跟后面的每个数字一一对比,如果碰到比它小的,就把那个新发现的小数字赋给“最小值”变量,否则维持原状。这样一轮下来,就能找到当前这些数字里的最小值,也就是应该在升序的列表中排在队首的元素。而这一轮当中,我们进行了“”元素总个数-1”次比较。紧接着,把这个最小的元素从原列表中删除。再用...原创 2019-04-13 19:20:09 · 106441 阅读 · 17 评论 -
Python实现用户输入首字母,程序判断是星期几,如果判断不出来,则让用户输入第二个字母
思路:Monday,Wednesday,Friday是看第一个字母就能判断出来的Tuesday,Thursday,Saturday,Sunday需要看第二个字母所以我们用if……else……语句来分情况讨论week={'M':'星期一','W':'星期三','F':'星期五'}#把三个能靠第一个字母判断出来的放进字典first=input('欢迎使用判断星期几的程序。请输入...原创 2019-04-09 11:23:36 · 6046 阅读 · 4 评论 -
Python实现给一个不多于5位的正整数,求它是几位数,逆序打印这个数字
一、简单版(只实现这两个需求)num=input('你好呀,请输入一个不多于五位的正整数>>>')print('嗯,我看过了,这是一个'+str(len(num))+'位数。')#len函数可以查看字符串的长度,也就是能得出这是一个几位数,用str转换成字符串之后才能跟前后文字拼接print('我把它倒过来给你看看:',''.join(list(reversed(nu...原创 2019-04-11 18:23:05 · 26323 阅读 · 4 评论 -
Python打印出由点点组成的菱形
• •••••••••••••••••••• ••• •最终打印出来的效果如上图所示。代码如下:for i in range(1,8,2):#从上到下的前四行,每行的点点数量是1,3,5,7.所以这里设置范围是从1到7,步长是2. j=int((7-i)/2) #每行的点点和空格加起来恒等于7,利用这一点计算点点两边的空格数量。 p...原创 2019-04-06 12:08:14 · 1045 阅读 · 0 评论 -
Python找出所有的水仙花数
水仙花数是一个三位数,特点是它的每个位上的数字的三次方之和等于它本身,例如153=1³+5³+3³我们用for循环可以找出所有的水仙花数:for a in range(1,10):#a是百位上的数字,所以不能是0,只能是1到9 for b in range(0,10): #b是十位上的数字,范围是0到9 for c in range(0,10): ...原创 2019-04-06 11:39:41 · 19369 阅读 · 6 评论 -
Unknown command:crawl 报错 在vscode中的处理办法
问题描述我的scrapy项目在cmd可以正确运行,但是在我编写好的用于运行的main.py文件里运行却会报错,报错内容是“unknown command crawl”。排除的原因:main.py文件位置错误,scrapy.cfg文件位置错误或缺失或内容错误,爬虫文件位置错误。经过搜索与尝试,最终在一位博主的启发下确认了我的问题:vscode工作目录和scrapy.cfg所在目录不一致。我的v...原创 2019-03-15 11:23:01 · 11217 阅读 · 14 评论 -
笨办法学Python习题13 vscode运行方法
昨天被这个习题难住了,按照以往的运行方式终端就报错,说是参数数量不对。上网查了一下,有小伙伴分享了在cmd里运行的方法,试了一下果然行得通。高兴之余还是觉得解决得不够圆满:凭啥不能在我的编辑器终端运行呢?又吭哧吭哧一顿搜索,有人给出了pycharm的个性化处理方法,但是我用的是vscode,这就很尴尬了……今天灵机一动,何不把我在cmd输入的指令直接输入我vscode的终端呢?试了一下,完美运...原创 2019-03-01 18:59:23 · 426 阅读 · 3 评论 -
Python从入门到实践习题12-4打印event.key的值的两种答案
一、简易版这种实现方式,最终只是在终端打印出event.key的值以及其类型。import pygame,sysdef run_game(): '''这个函数能够在我们按下键盘按键的时候打印出event.key以及其数据类型''' pygame.init() screen=pygame.display.set_mode((100,100)) pyg...原创 2019-04-27 20:34:34 · 3992 阅读 · 5 评论 -
Python判断列表里是否有重复元素的三种方法
一、用set方法去重后与原列表长度比较lst=[1,3,5,3,4,4,2,9,6,7]set_lst=set(lst)#set会生成一个元素无序且不重复的可迭代对象,也就是我们常说的去重if len(set_lst)==len(lst): print('列表里的元素互不重复!')else: print('列表里有重复的元素!')二、用append的方式把原列表中...原创 2019-05-02 20:07:27 · 87545 阅读 · 6 评论 -
改变django的语言显示,使LoginView产生的表单显示中文
问题描述:我在做一个小项目的时候登录视图不是自己写的,而是直接使用了django提供的LoginView,最终在网页上的显示如下:“登录您的账户”这几个汉字是我自己写入template的,但是下面的表单是LoginView传过来的,所以显示的是英语。但是我希望表单里的文字也能显示汉语,整个页面都面向中国用户。解决办法:为了解决上述问题,我们需要更改settings.py里的语...原创 2019-07-15 10:38:32 · 640 阅读 · 0 评论 -
django用redis存储session报错redis.exceptions.ResponseError: NOAUTH Authentication required的解决办法
问题描述我想用redis来存储session,于是我在settings.py文件里做了如下设置:#将session的存储位置设为redis数据库SESSION_ENGINE='redis_sessions.session'#设置服务器ipSESSION_REDIS_HOST='localhost'#填写redis端口号SESSION_REDIS_PORT=6379#选择red...原创 2019-06-23 17:22:22 · 5841 阅读 · 8 评论