最近在Github上发现一些挺不错的练习题,觉得挺有意思的,拿来练练手。会不间断更新。
Python 练习册,每天一个小程序
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果
我用了PIL模块。PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
我的编译环境为anaconda3 + pycharm
@requires_authorization
from PIL import Image, ImageDraw, ImageFont
def main():
#打开图片
im = Image.open('weixin.jpg')
#查看图片大小、格式和模式
print(im.size, im.format, im.mode)
im_size = im.size
#选择对应的字体大小
font_size = int(0.3*im_size[0])
#设置字体格式和字体大小,字体大小参数为整形
ft = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', size=font_size)
#(0.85*im_size[0],0)用来确定数字位置,'4'为要写入的数字
ImageDraw.Draw(im).text((0.8*im_size[0], 0), u'4', font=ft, fill='red')
#会直接调用Windows照片查看器来显示图片
im.show()
print('显示完成')
im.save('new.jpg')
print('新建并保存')
if __name__ == '__main__':
main()
参考教程
http://blog.csdn.net/icamera0/article/details/50762050
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000
做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
开始用的是string模块生成大小写的字母加0到9数字的字符串,然后用random模块随机从改字符串中取数,后来发现有个叫uuid的模块,专门用来生产这个,uuid模块的介绍网上百度一大堆。
dis模块是用来看python变成汇编语言是怎么样的,毕竟学过单片机的汇编,挺感兴趣的。
@requires_authorization
import string
import random
import uuid
#import dis
def create_num(num, length=16):
result = []
while num > 0:
uuid_id = uuid.uuid1()
# 删去字符串中的'-',取出前length 个字符
temp = str(uuid_id).replace('-', '')[:length]
if temp not in result:
result.append(temp)
num -= 1
return result
def generate_activation_code(n):
a = string.ascii_letters + string.digits
f = 0
key_list = []
while f<200:
f += 1
key = random.choice(a)
for i in range(n-1):
key += random.choice(a)
key_list.append(key)
return key_list
def main():
n = int(input('请输入验证码位数:(12--24位)'))
if n>=12 and n<=24:
key_list = create_num(200,n)
else:
print('位数需要在12到24位之间!')
for key in key_list:
print(key)
# print(dis.dis(main))
if __name__=='__main__':
main()
将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。
这个就比较恶心了,先要安装mysql,我用的是win10系统,MySQL数据库安装与配置详解
然后要先设一个用户和密码,然后要创建一个数据库,再创建一个表和标题。这样才能用pymysql模块连接数据库,pymysql可以用conda install pymysql 命令安装。
#连接到数据库
connect = pymysql.connect(host='127.0.0.1',
user='你的主机名',
passwd='你的密码',
db='你的数据库名',
charset='utf8')
user和passwd是你的用户名和密码,db是你的数据库名
@requires_authorization
import uuid
import pymysql
def create_num(num, length=16):
result = []
while num > 0:
uuid_id = uuid.uuid1()
# 删去字符串中的'-',取出前length 个字符
temp = str(uuid_id).replace('-', '')[:length]
if temp not in result:
result.append(temp)
num -= 1
return result
def main():
n = int(input('请输入验证码位数:(12--24位)'))
if n>=12 and n<=24:
key_list = create_num(200,n)
else:
print('位数需要在12到24位之间!')
#连接到数据库
connect = pymysql.connect(host='127.0.0.1',
user='你的主机名',
passwd='你的密码',
db='你的数据库名',
charset='utf8')
#创建游标
cursor = connect.cursor()
#全表删除
cursor.execute('TRUNCATE TABLE activation_code')
for i, key in enumerate(key_list):
print(key)
cursor.execute("""INSERT INTO activation_code VALUE(%s, %s)""", (i, key))
connect.commit()
cursor.execute('SELECT * from activation_code')
lists = cursor.fetchall()
for list in lists:
print(list)
connect.close()
if __name__=='__main__':
main()
使用 Python 生成类似于下图中的字母验证码图片
廖雪峰老师在讲PIL的时候顺便把第十题做了,链接是第0000题的第二个。
代码已经在anaconda3+pycharm环境下试过了
@requires_authorization
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
# 随机字母:
def rndChar():
return chr(random.randint(65, 90))
# 随机颜色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 随机颜色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
def main():
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', 40)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.show()
image.save('010-code.jpg')
if __name__=='__main__':
main()
用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)
使用的时候要在代码文件目录下创建一个img文件夹,不然会报错。
@requires_authorization
import requests
from bs4 import BeautifulSoup
def get_image(url):
'''
获得链接里的图片并且保存
'''
r = requests.get(url, timeout = 5)
soup = BeautifulSoup(r.text, 'lxml')
pic_link = soup.find_all('img',{'pic_type':'0'})
for i,image in enumerate(pic_link):
image_link = image['src']
image = requests.get(image_link,timeout = 10)
if image.status_code == 200:
with open('img/'+str(i)+'.jpg','wb') as f:
f.write(image.content)
print(image_link)
def main():
url = 'http://tieba.baidu.com/p/2166231880'
get_image(url)
if __name__=='__main__':
main()
纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示:
{
"1":["张三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
请将上述内容写到 student.xls 文件中
因为是2017年了,我准备把它写到 014.xlsx 文件中,用的是openpyxl模块。
@requires_authorization
import openpyxl
def getdata():
'''
从文件中读取信息,这里我在程序目录下新建了一个‘014.txt’
f.read()返回一个str类型,因为文件里有冒号,我把它转化为
字典,便于写入。
'''
with open('014.txt','r') as f:
r = f.read()
d = eval(r)
#print(type(r),r,type(d),d)
return d
def sace_into_xlsx(d):
'''
将文件存到excle中
'''
#新建一个excle表
wb = openpyxl.Workbook()
#获得一个活动的sheet
sheet = wb.active
#行号
row = 1
for key, value in d.items():
#写每行,第一列和第二列对应的单元格
sheet.cell(row=row, column=1, value=row)
sheet.cell(row=row, column=2, value=key)
#写每行对应列的单元格
for i in range(len(value)):
sheet.cell(row=row, column=i+2, value=value[i])
row += 1
#保存excle文件
wb.save('014.xlsx')
def main():
info = getdata()
sace_into_xlsx(info)
if __name__=='__main__':
main()
纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示:
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
请将上述内容写到 city.xls 文件中,这个题和14题差不多,就不写了。
纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示:
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
请将上述内容写到 numbers.xls 文件中,这个题和14题差不多,也不写了。