Python 练习册,每天一个小程序

第0000题~第0010题

第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。
from PIL import Image, ImageDraw

im = Image.open('./image/portrait.jpg')

draw = ImageDraw.Draw(im)
draw.ellipse((40, 0, 50, 10), fill=(255, 0, 0))

im.show()
im.save('new.jpg') 

原图: 完成图

拓展 : 

#文本:
#设置字体,simkai为楷体,字体大小40
newFont=ImageFont.truetype('simkai.ttf',40)
draw.text((200,100),'you are so good!',(255,255,0),font=newFont) 

PIL中一个更高级绘图库见The aggdraw Module

第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
import string, random
# 激活码中的字符和数字
field = string.ascii_letters + string.digits


# 获得四个字母和数字的随机组合
def getRandom():
    return "".join(random.sample(field, 4))


# 生成的每个激活码中有几组
def concatenate(group):
    return "-".join([getRandom() for i in range(group)])


# 生成n组激活码
def generate(n):
    return [concatenate(4) for i in range(n)]


if __name__ == '__main__':
    print(generate(200))

['Muf7-vWL0-Oonp-Vsal',  'N3V2-t5K0-N7Fj-juFV' , ... ... , '9TEZ-jUzV-KG1O-09Gb']
注 : 答案不唯一 , 如有错误欢迎指正 . 多谢!

1)当文件是被调用时,__name__的值为模块名;

2)当文件被执行时,__name__的值为 ‘__main__’。

if __name__ == '__main__': 为文件的入口

第 0000 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。
#!/user/bin/pythoon3

import pymysql
import string
import random

db = pymysql.connect(host="localhost", port=3306, user="root",
                     password="root", database="test", charset='utf8')

cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS GetCode")
sql = '''create table GetCode(id int (4) NOT NULL primary key auto_increment, 
code char(20) NOT NULL)
'''
cursor.execute(sql)
field = string.ascii_letters + string.digits


def get_random(num):
    return "".join(random.sample(field, num))


def concatenate(num, group):
    return "-".join(get_random(num) for i in range(group))


def insert_to(nums, group, num):
    for i in range(nums):
        codes = concatenate(num, group)
        insert_sql = "INSERT INTO GetCode(code)VALUES ('%s')" % codes
        cursor.execute(insert_sql)


if __name__ == "__main__":
    try:
        insert_to(200, 4, 4)
        db.commit()
    except:
        db.rollback()
    db.close()

                                                            

第 0003 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。
#!/usr/bin/python
#为了实现它, 偷偷的看了一边 redis 数据库, 看到列表的语法就实现了,总体刚觉还是蛮有意思的~收获蛮大

import redis
import random
import string

r = redis.Redis(host="127.0.0.1", port=6379, db=0)
field = string.ascii_letters + string.digits


def get_random(num_in_group):
    return "".join(random.sample(field, num_in_group))


def concatenate(num_for_group, num_in_group):
    return "-".join(get_random(num_in_group) for i in range(num_for_group))


def insert_to(code_num, num_for_group, num_in_group):
    for i in range(code_num):
        r.lpush('verification', concatenate(num_for_group, num_in_group))


if __name__ == "__main__":
    insert_to(200, 4, 4)

在redis查看结果:

                                            

第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。
def count_words(file, word):
    temp = open(file)
    Str = temp.read()
    num = Str.upper().count(word.upper())
    print("搜索结果:有%d个[%s]" % (num, word))
    temp.close()


if __name__ == '__main__':
    count_words('C:\\Users\\Administrator\\Desktop\\工作\\资料\\123.txt', 'a')
#   count_words(r'C:\Users\Administrator\Desktop\工作\资料\123.txt', 'a')    


第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。
from PIL import Image
import os


def new_file(new_path):
    """
    创建转换后的图片目录
    :param new_path: 存放新图片目录
    :return: 提示信息
    """
    folder = os.path.exists(new_path)

    if not folder:
        os.makedirs(new_path)
        print("---  成功创建新文件...  ---")
    else:
        print("---  已存在该文件...  ---")


def resize(filename, path):
    """
    存放图片
    :param filename:
    :param path:
    :return:
    """
    img = Image.open(filename)
    out = img.resize((640, 1130), Image.ANTIALIAS)
    f = filename.strip(".jpg")
    new_name = f + "r.jpg"
    try:
        out.save(path + '\\' + new_name)
    except Exception:
        print('创建文件失败, 图片存储路径转换为原路径... ')
        out.save(filename)


def get_extension():
    """
    生成文件名列表
    :return:
    """
    for i in lists:
        if os.path.splitext(i)[1] == '.jpg':
            f_list.append(i)


if __name__ == '__main__':

    file_path = r'C:\Users\Administrator\Desktop\picture'
    new_file_path = r'C:\Users\Administrator\Desktop\new'
    f_list = []
    os.getcwd()
    os.chdir(file_path)
    lists = os.listdir(file_path)
    new_file(new_file_path)
    get_extension()
    for k in f_list:
        resize(k, new_file_path)
    print('图片转换成功! 保存的路径为%s' % new_file_path)

 

转载于:https://my.oschina.net/yezijun/blog/1624422

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值