零基础学python 第五章

实例1 使用字符串拼接输出一个关于程序员的笑话
programmer_1 = '程序员甲:搞IT太辛苦了,我想换行......怎么办?'
programmer_2 = '程序员乙:敲一下回车键'
print(programmer_1 +'\n' + programmer_2)

运行结果

程序员甲:搞IT太辛苦了,我想换行......怎么办?
程序员乙:敲一下回车键

 

实例2 截取身份证号码中的出生日期

programmer_1 = '你知道我生日吗?'
print('程序员甲说',programmer_1)
programmer_2 = '输入你想说的话'
print('程序员乙说',programmer_2)
idcard = '123456199006277890'
print('程序员甲说',idcard)
birthday = idcard[6:10] + '' + idcard[10:12] +'' + idcard[12:14] + ''
print('程序员乙说:','你是' + birthday +'出生的,所以你的生日是' + birthday[5:])

运行结果

程序员甲说 你知道我生日吗?
程序员乙说 输入你的身份号码
程序员甲说 123456199006277890
程序员乙说: 你是1990年06月27日出生的,所以你的生日是06月27日

 

实例3 输出被@的好友名称

str1 = '@明日科技 @扎克伯格 @俞敏洪'
list1 = str1.split(' ')
print('您@的好友有:')
for item in list1:
    print(item[1:])

运行结果

您@的好友有:
明日科技
扎克伯格
俞敏洪

 

实例4 通过好友列表生成全部被@的好友

list_friend = ['明日科技','扎克伯格','俞敏洪','马云','马化腾']
str_friend = '@'.join(list_friend)
at = '@'+ str_friend
print('您要@的好友:',at)

运行结果

您要@的好友: @明日科技@扎克伯格@俞敏洪@马云@马化腾

 

实例5 不区分大小写验证会员名是否一致

usename_1 = '|MingRi|mr|mingisoft|WGH|MRSoft|'
usename_2 = usename_1.lower()
regname_1 = input('输入要注册的会员名称:')
regname_2 = '|' + regname_1.lower() + '|'
if regname_2 in usename_2:
    print('会员名',regname_1,'已经存在!')
else:
    print('会员名',regname_1,'可以注册!')

运行结果

输入要注册的会员名称:python
会员名 python 可以注册!

 

实例6 格式化不同的数值类型数据

import math
print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251+3950))
print('{0:1f}用科学计数法表示:{0:E}'.format(120000.1))
print('π取5位小数:{:.5f}'.format(math.pi))
print('{0:d}的16进制结果是:{0:#x}'.format(100))
print('天才是由{:.0%}的灵感,加上{:.0%}的汗水。'.format(0.01,0.99))

运行结果

1251+3950的结果是(以货币形式显示):¥5,201.00元
120000.100000用科学计数法表示:1.200001E+05
π取5位小数:3.14159
100的16进制结果是:0x64
天才是由1%的灵感,加上99%的汗水。

 实例7 验证输入的手机号码是否为中国移动的号码

import re
pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mobile = '13634222222'
match = re.match(pattern, mobile)
if match == None:
    print(mobile, '不是有效的中国移动手机号码。')
else:
    print(mobile, '是有效的中国移动手机号码。')
mobile = '13144222221'
match = re.match(pattern, mobile)
if match == None:
    print(mobile, '不是有效的中国移动手机号码。')
else:
    print(mobile, '是有效的中国移动手机号码。')

运行结果

13634222222 是有效的中国移动手机号码。
13144222221 不是有效的中国移动手机号码。

实例8 验证是否出现危险字符

import re
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'        
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
match = re.search(pattern, about)
if match == None:
    print(about, '@ 安全!')
else:
    print(about, '@ 出现了危险词汇!')
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
match = re.search(pattern, about)
if match == None:
    print(about, '@ 安全!')
else:
    print(about, '@ 出现了危险词汇!')

运行结果

我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。 @ 出现了危险词汇!
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。 @ 安全!

实例9 替换出现的危险字符

import re
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'        
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
sub = re.sub(pattern, '@_@', about)             
print(sub)
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
sub = re.sub(pattern, '@_@', about)             
print(sub)

运行结果

我是一名程序员,我喜欢看@_@方面的图书,想研究一下@_@。
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。

实例10输出被@的好友名称(应用正则表达式)

import re
str1 ='@明日科技 @扎克伯格 @俞敏洪'
pattern = r'\s*@'                   
list1 = re.split(pattern, str1)     
print('您@的好友有:')
for item in list1:
    if item != "":                  
        print(item)

运行结果

您@的好友有:
明日科技
扎克伯格
俞敏洪

实战一:打印象棋口诀

str1 = '马走日'
str2 = '象走田'
str3 = '车走直路炮翻山'
str4 = '士走斜线护将边'
str5 = '小卒一去不回还'
s1 = ''
s2 = ''
print("象棋口诀:")
print(str1 + s1)
print(str2 + s1)
print(str3 + s1)
print(str4 + s1)
print(str5 + s2)

运行结果

象棋口诀:
马走日,
象走田,
车走直路炮翻山,
士走斜线护将边,
小卒一去不回还。

实战二:判断车牌归属地

str1 = '津A·12345','沪A·23456','京A·34567'
for i in range(len(str1)):
    print('' + str(i + 1) + '张车牌号码:\n' + str1[i])
    if str1[i][0] == '':       
        print("这张号牌的归属地:天津")
    elif str1[i][0] == '':
        print("这张号牌的归属地:上海")
    elif str1[i][0] == '':
        print("这张号牌的归属地:北京")

运行结果

第1张车牌号码:
津A·12345
这张号牌的归属地:天津
第2张车牌号码:
沪A·23456
这张号牌的归属地:上海
第3张车牌号码:
京A·34567
这张号牌的归属地:北京

实战三:模拟微信抢红包

import random
import decimal
print("--------------模拟微信抢红包-------------")
money = float(input("请输入要装入红包的总金额(元):"))
count = int(input("请输入红包的个数(个):"))
i = 0
for num in range(1, count + 1):
    i = i+1
    if num == count:
        end = money
    else:
        end = random.uniform(0.01, money) 
        end = round(end, 2)               
        money = money - end
        money = round(money, 2)
    print("" + str(i) + "个红包:" + str(end) + "")

运行结果

--------------模拟微信抢红包-------------
请输入要装入红包的总金额(元):50
请输入红包的个数(个):5
第1个红包:34.08元
第2个红包:7.47元
第3个红包:3.44元
第4个红包:1.71元
第5个红包:3.3元

实战四 显示实时天气预报

weather='2018年4月17日 \t 天气预报:{:s} \t 20C~7°℃ \t 微风转西风3~4级\n \
08:00 \t 天气预报:{:s} \t 13℃ \t 微风\n\
12:00 \t 天气预报:{:s} \t 19℃ \t 微风\n\
16:00 \t 天气预报:{:s} \t 18℃ \t 西风3~4级\n\
20:00 \t 天气预报:{:s} \t 15℃ \t 西风3~4级\n\
00:00 \t 天气预报:{:s} \t 12℃ \t 微风\n\
04:00 \t 天气预报:{:s} \t 9℃  \t 微风'
ans = weather.format('', '', '', '', '', '', '')
print(ans)

运行结果

2018年4月17日      天气预报:晴      20C~7°℃      微风转西风3~4级
 08:00      天气预报:晴      13℃      微风
12:00      天气预报:晴      19℃      微风
16:00      天气预报:晴      18℃      西风3~4级
20:00      天气预报:晴      15℃      西风3~4级
00:00      天气预报:晴      12℃      微风
04:00      天气预报:晴      9℃       微风

匹配出由“数字、字母、特殊符号”这三种字符组成的八位密码

import re
pattern = r"^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)^.{8}$"
string = ["adoief&89fq$def", "12345refjwl", "123456A!"]
for item in string:
    res = re.search(pattern, item)
    if res:
        print(item, "匹配成功")
    else:
        print(item, "匹配失败,不是由数字、字母、特殊字符组成的8位密码")

运行结果

adoief&89fq$def 匹配失败,不是由数字、字母、特殊字符组成的8位密码
12345refjwl 匹配失败,不是由数字、字母、特殊字符组成的8位密码
123456A! 匹配成功

匹配出身份证属于广东省的身份证号码

import re
# 44+13位数字 或 44+16位数字 或 44+15位数字+一位数字/X/x
pattern = r"(^44\d{13}$)|(^44\d{16}$)|(^44\d{15})(\d|X|x)$"
id = ["441502200211111234","441234567890111X","431212121212121","40111111111111X",]
for item in id:
    if (len(item) == 15) or (len(item) == 18):
        search = re.search(pattern, item)    
        if search == None:     
            print(item + "不是广东省的身份证号码,头两位数字为:" + item[0:2])
        else:                  
            print(item + "是广东省的身份证号码,头两位数字为:" + item[0:2])
    else:         
        print(item + "不符合身份证号码格式")

运行结果

441502200211111234是广东省的身份证号码,头两位数字为:44
441234567890111X不符合身份证号码格式
431212121212121不是广东省的身份证号码,头两位数字为:43
40111111111111X不是广东省的身份证号码,头两位数字为:40

 

posted @ 2022-10-12 15:40  21信计1朱美怡  阅读(68)  评论(0)    收藏  举报