最近在Github上發現一些挺不錯的練習題,覺得挺有意思的,拿來練練手。會不間斷更新。
Python 練習冊,每天一個小程序
第 0000 題:
將你的 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
第 0001 題:
做爲 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()
第 0002 題:
將 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()
第 0010 題:
使用 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()
第 0013 題:
用 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()
第 0014 題:
純文本文件 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()
第 0015 題:
純文本文件 city.txt爲城市信息, 裏面的內容(包括花括號)如下所示:
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
請將上述內容寫到 city.xls 文件中,這個題和14題差不多,就不寫了。
第 0016 題:
純文本文件 numbers.txt, 裏面的內容(包括方括號)如下所示:
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
請將上述內容寫到 numbers.xls 文件中,這個題和14題差不多,也不寫了。