Python习题和答案

习题地址:https://github.com/Yixiaohan/show-me-the-code


0、将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果
# coding=utf-8
from PIL import Image, ImageDraw, ImageFont # Pillow

# 打开原图片
openImg = Image.open('./etc/ac345982b2b7d0a2e416b6c2caef76094a369a96.jpg')
size = (0, 0, 125, 125)

# 新图片
newImg = Image.new('RGB', openImg.size, (0, 0, 0))
draw = ImageDraw.Draw(newImg)

# 粘贴
newImg.paste(openImg.crop(size), # 复制
             size)               # 大小
draw.text((90, 2), # 坐标
          '14',    # 字符串
          font = ImageFont.truetype('./etc/arial.ttf', 24), # 字体
          fill = (255, 0, 0))                               # 颜色
newImg.save('./etc/code1.png', 'png')
原图片

新图片

参考:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000
http://liam0205.me/2015/04/22/pil-tutorial-basic-usage/


1、做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
# coding=utf-8
import random
from PIL import Image, ImageDraw, ImageFont # Pillow

# 字符串相关
_String = 'Q W E R T Y U I O P A S D F G H J K L Z X C V B N M q w e r t y u i o p a s d f g h j k l z x c v b n m 1 2 3 4 5 6 7 8 9 0'.split(' ')
_Length = len(_String) - 1

# 生成随机字符串(优惠券id)
# @param {number} length: 字符串长度
# @return {string}: 返回字符串
def randomString(length = 0):
  s = ''
  i = 0
  while i < length:
    s += _String[random.randint(0, _Length)]
    i += 1
  return s

# 生成优惠券
# @param {string} stringID: 优惠券id
_Font = ImageFont.truetype('./etc/arial.ttf', 24)
def youHuiQuan(stringID):
  img = Image.new('RGB', (200, 40), (0, 0, 0))
  draw = ImageDraw.Draw(img)
  draw.text((5, 8), stringID, font = _Font, fill = (255, 255, 255))
  img.save('./result/' + stringID + '.jpg', 'jpeg')

# 初始化
def init():    
  i = 0   
  j = 5    
  while i < j:
    t = randomString(10)        
    youHuiQuan(t)        
    i += 1

init()

2、将 1 题生成的激活码(或者优惠券)保存到 MySQL关系型数据库中。
# coding=utf-8
import random
import pymysql
from PIL import Image, ImageDraw, ImageFont # Pillow

# 字符串相关
_String = 'Q W E R T Y U I O P A S D F G H J K L Z X C V B N M q w e r t y u i o p a s d f g h j k l z x c v b n m 1 2 3 4 5 6 7 8 9 0'.split(' ')
_Length = len(_String) - 1

# 生成随机字符串(优惠券id)
# @param {number} length: 字符串长度
# @return {string}: 返回字符串
def randomString(length = 0):    
  s = ''    
  i = 0   
  while i < length: 
    s += _String[random.randint(0, _Length)]
    i += 1    
  return s

# 生成优惠券
# @param {string} stringID: 优惠券id
_Font = ImageFont.truetype('./etc/arial.ttf', 24)
def youHuiQuan(stringID):    
  img = Image.new('RGB', (200, 40), (0, 0, 0))    
  draw = ImageDraw.Draw(img)    
  draw.text((5, 8), stringID, font = _Font, fill = (255, 255, 255))    
  img.save('./result/' + stringID + '.jpg', 'jpeg')

# 存入数据库
# @param db: 数据库
# @param cursor: 数据库游标
# @param {string} rs: 随机字符串
# @return {number}: 返回数据库是否有该字符串的结果
def sql(db, cursor, rs):    
  # 判断数据库是否有该字符串    
  sql1 = '''SELECT str FROM random              
            WHERE str = '%s' ''' % (rs)   
  r1 = cursor.execute(sql1)    
  # 如果r1 = 0,表示该字符串没有生成过    
  if r1 == 0:        
    # 将字符串插入到数据库中        
    sql2 = '''INSERT INTO random                  
              (str) 
              VALUES ('%s')''' % (rs)        
    r2 = cursor.execute(sql2)        
    db.commit()    
  return r1

# 初始化
'''
CREATE TABLE if not exists `random` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `str` varchar(255) DEFAULT NULL, 
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
'''
def init():    
  i = 0   
  j = 4    
  db = pymysql.connect('localhost', 'lianxi', 'lianxi', 'lianxi')   
  cursor = db.cursor()    
  # 循环    
  while i < j:        
    # 生成随机字符串并将结果存入到数据库        
    t = randomString(10)        
    n = sql(db, cursor, t)        
    # 返回0表示该随机字符串没有生成过,生成图片并使i+1       
    if n == 0:            
      youHuiQuan(t)           
      i += 1    
    db.close()

init()

3、任一个英文的纯文本文件,统计其中的单词出现的个数。
# coding=utf8
import re

# 打开文件并读取文本
file = open('./etc/t4.txt', 'r')
text = file.read()
file.close()

# 正则
regexp = re.compile(r'''[\s         # 匹配空格 
                        \n          # 匹配换行                        
                        .,!():'"?<> # 匹配特殊符号
                        ]+          # 匹配>=1个符合规则''', re.X)
newText = re.split(regexp, text)

# 统计每个单词出现的个数
# -1是因为数组的最后一位是''
wordLength = {}
for index in range(len(newText) - 1):    
  if newText[index] in wordLength:
    wordLength[newText[index]] += 1
  else:
    wordLength[newText[index]] = 1

# 输出结果
print('A total of ' + str(len(newText) - 1) + ' words appeared.\n')
for key in wordLength:    
  print(key + ':' + str(wordLength[key]))

4、用 Python 写一个爬图片的程序,爬这个链接里的妹子图片 :)
# coding=utf8
import re
import urllib
import urllib2

_TieBaURL = 'http://tieba.baidu.com/p/2166231880'

# get请求
def get(url):    
  request = urllib2.Request(url)   
  response = urllib2.urlopen(request)  
  return response.read()

# 获取图片字符串
def getImgUrl(html):
  h = re.compile(r'http://([^\s]+)\.(png|jpg)', re.I) 
  return h.findall(html)

# 下载
def download(urls):    
  txt = ''    
  for index in range(len(urls)):        
    t = urls[index][0] + '.' + urls[index][1]  # 文件地址
    u = 'http://' + t                          # http + 文件地址
    urllib.urlretrieve(u, './image/' + str(index) + '.' + urls[index][1])  # 下载并保存
    txt += u + '\n'    
  # 把地址存到文档里    
  file = open('./image/url.txt', 'w+')    
  file.write(txt)    
  file.close()

# 初始化
def init():    
  html = get(_TieBaURL)  # 请求    
  urls = getImgUrl(html) # 分解获得地址    
  download(urls)         # 下载

init()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,298评论 6 428
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,509评论 4 418
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,746评论 1 61
  • 时间,连带着以时间为节点的承诺。沦陷,佯装挣扎般沦陷。 周一伊始,便被朋友指出说我有一身和尚气,看起来像是“对异性...
    不骑孔雀的考拉阅读 196评论 0 1
  • 想要赚取财富,必须要了解现金流,良好的现金流就像一条河渠,能让资产的流动始终处于活跃和更新的状态。 那么,什么是现...
    财商大叔阅读 621评论 1 4