python基础阶段 经典练习题 拾英札记(3)

对于编程学习来说,动手操练和重复训练很重要.

因为这是一个注重实践的活,最终要下笔落字.

更何况,即使你看了很多博客,听了很多课,你脑中的认识和手指下的-屏幕上的反馈,逻辑上是两个维度-两个载体的,中间需要时间来关联上,所以不能缺少实践.

很多时候,基于重复的操练,原有的困惑会化解,或许灵感收到启发,或许是刷进了潜意识,成为自己的固有认知了.

# 11  定义函数,生成纯数字验证码(预设4位数)

 import random
# 定义函数的默认形参,默认是4位数
def code(num=4):
# 用容器的思想,来盛放展位性的变量 容器中转
code_list = []
for x in range(num):
# -->code_list.append(random.randint(0,9)) 我原来错误的输入
# TypeError: sequence item 0: expected str instance, int found
code_list.append(str(random.randint(0,9)))
# --> return(''.join(code_list)
# return 语句缩进位置有误
return(''.join(code_list)) print(code())

    # 另外一种方法

 import random
def code(num=4):
string = ''
lt = random.sample(string, num)
# sample(seq, n) 从列表或者字符串中随机抽取n元素,存放到新列表中,然后返回新列表
return ''.join(lt) print(code())

#12  模拟计算器(四则运算)

 def add(a, b):
return a+b
def sub(a, b):
return a-b
def mul(a, b):
return a*b
def div(a, b):
return a/b # 用input来交互
a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
fuhao = input('请选择运算符号(+ - * /):') # 流程控制,调用函数
if fuhao == '+':
print(add(a, b))
elif fuhao == '-':
print(sub(a, b))
elif fuhao == '*':
print(mul(a, b))
elif fuhao == '/':
print(div(a, b))

    #另外一种方法

 # 使用黑终端(命令行)交互
def add(a, b):
return a+b
def sub(a, b):
return a-b
def mul(a, b):
return a*b
def div(a, b):
return a/b import sys
# 使用黑终端(命令行)交互: 在win10系统下,按下'window'键+'r'键 -> 输入"cmd" -> 回车键,进入控制台命令窗口 -> 输入cd,空格,输入代码文件路径,空格,输入参数的值.
# sys.argv[]是在命令行用来获取参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始.注意,下面的变量(a b fuhao)即为代码文件的参数哦.
# 命令行参数以空格为分隔符
a = int(sys.argv[1])
b = int(sys.argv[2])
fuhao = sys.argv[3] if fuhao == '+':
print(add(a, b))
elif fuhao == '-':
print(sub(a, b))
elif fuhao == '*':
print(mul(a, b))
elif fuhao == '/':
print(div(a, b))

使用黑终端(命令行)交互

#13  归属地查询  输入手机号,匹配归属地(根据前七位)

 string = '''5582|1860101|010|北京市|北京联通GSM卡
5583|1860100|010|北京市|北京联通GSM卡
5584|1368141|010|北京市|北京移动神州行卡
5585|1860111|010|北京市|北京联通GSM卡
5586|1358198|010|北京市|北京移动动感地带卡
5587|1361139|010|北京市|北京移动预付费卡
5588|1361138|010|北京市|北京移动神州行卡
5591|1360110|010|北京市|北京移动全球通卡
5748|1364110|010|北京市|北京移动神州行卡
10186|1581584|020|广东省广州市|广东移动全球通卡
15046|1391897|021|上海市|上海移动全球通卡
17250|1502207|022|天津市|天津移动全球通卡
21137|1345272|023|重庆市万州|重庆移动大众卡
22700|1347812|024|辽宁省沈阳市|辽宁移动大众卡
24256|1377065|025|江苏省南京市|江苏移动全球通卡
26360|1898606|027|湖北省武汉市|湖北电信CDMA卡
28709|1860802|028|四川省成都市|四川联通GSM卡
30641|1552961|029|陕西省西安市|陕西联通GSM卡
31700|1563007|0310|河北省邯郸市|河北联通GSM卡
33360|1583396|0311|河北省石家庄市|河北移动全球通卡
34825|1508122|0312|河北省保定市|河北移动全球通卡
35363|1551235|0313|河北省张家口|河北联通GSM卡
37700|1331326|0316|河北省廊坊市|河北电信CDMA卡
43500|1350358|0358|山西省吕梁市|山西移动全球通卡
43908|1553625|0359|山西省运城市|山西联通GSM卡
44521|1335360|0370|河南省商丘市|河南电信CDMA卡
50078|1509369|0378|河南省开封市|河南移动全球通卡
53603|1583981|0398|河南省三门峡|河南移动全球通卡
53916|1335897|0410|辽宁省铁岭市|辽宁电信CDMA卡
55248|1554254|0411|辽宁省大连市|辽宁联通GSM卡
58618|1374272|0427|辽宁省盘锦市|辽宁移动全球通卡
58932|1554183|0429|辽宁省葫芦岛|辽宁联通GSM卡
60268|1340475|0431|吉林省长春市|吉林移动大众卡
''' # 将字符串按照换行符进行切割
string_list = string.splitlines()
# 定义一个字典
area = {}
# 遍历每一行字符串,进行处理
for string in string_list:
# 将每一行字符串按照 | 切割
lt = string.split('|')
# 提取号码前7位
qianqi = lt[1]
# 提取归属地
guishu = lt[-1]
# 将号码前7位和归属地存放到字典中
area[qianqi] = guishu
# print(lt)
# break # print(area)
# 写个小死循环,用来查询手机号码归属地
while 1:
phone = input('请输入您的手机号码:')
# 提取输入手机号码的前7位
qiqi = phone[0:7]
# 判断键是否在字典中
if qiqi in area:
print('归属地为:%s' % area[qiqi])
else:
print('查无此号码')

#14 自己封装函数,实现相同于系统内置函数hex、oct、bin的功能 (以hex为例)

 def my_hex(n):
lt = []
while n: n, yushu = divmod(n, 2)
# 循环结束条件n==0,break
# 请理解divmod()的内涵 # --> lt.append(yushu) 错误
# TypeError: sequence item 0: expected str instance, int found
lt.append(str(yushu))
# 取余取反
lt.reverse()
return '0x'+ ''.join(lt) print(my_hex(19))

      #另外一种方法

 def my_hex(n):
#格式化输出...呵呵
return '0x' + '%x' % n print(my_hex(18))
上一篇:Codechef AMXOR


下一篇:洛谷 P2629 好消息,坏消息