对于编程学习来说,动手操练和重复训练很重要.
因为这是一个注重实践的活,最终要下笔落字.
更何况,即使你看了很多博客,听了很多课,你脑中的认识和手指下的-屏幕上的反馈,逻辑上是两个维度-两个载体的,中间需要时间来关联上,所以不能缺少实践.
很多时候,基于重复的操练,原有的困惑会化解,或许灵感收到启发,或许是刷进了潜意识,成为自己的固有认知了.
# 11 定义函数,生成纯数字验证码(预设4位数)
1 import random 2 # 定义函数的默认形参,默认是4位数 3 def code(num=4): 4 # 用容器的思想,来盛放展位性的变量 容器中转 5 code_list = [] 6 for x in range(num): 7 # -->code_list.append(random.randint(0,9)) 我原来错误的输入 8 # TypeError: sequence item 0: expected str instance, int found 9 code_list.append(str(random.randint(0,9))) 10 # --> return(''.join(code_list) 11 # return 语句缩进位置有误 12 return(''.join(code_list)) 13 14 print(code())
# 另外一种方法
1 import random 2 def code(num=4): 3 string = '0123456789' 4 lt = random.sample(string, num) 5 # sample(seq, n) 从列表或者字符串中随机抽取n元素,存放到新列表中,然后返回新列表 6 return ''.join(lt) 7 8 print(code())
#12 模拟计算器(四则运算)
1 def add(a, b): 2 return a+b 3 def sub(a, b): 4 return a-b 5 def mul(a, b): 6 return a*b 7 def div(a, b): 8 return a/b 9 10 # 用input来交互 11 a = int(input('请输入第一个数:')) 12 b = int(input('请输入第二个数:')) 13 fuhao = input('请选择运算符号(+ - * /):') 14 15 # 流程控制,调用函数 16 if fuhao == '+': 17 print(add(a, b)) 18 elif fuhao == '-': 19 print(sub(a, b)) 20 elif fuhao == '*': 21 print(mul(a, b)) 22 elif fuhao == '/': 23 print(div(a, b))
#另外一种方法
1 # 使用黑终端(命令行)交互 2 def add(a, b): 3 return a+b 4 def sub(a, b): 5 return a-b 6 def mul(a, b): 7 return a*b 8 def div(a, b): 9 return a/b 10 11 import sys 12 # 使用黑终端(命令行)交互: 在win10系统下,按下'window'键+'r'键 -> 输入"cmd" -> 回车键,进入控制台命令窗口 -> 输入cd,空格,输入代码文件路径,空格,输入参数的值. 13 # sys.argv[]是在命令行用来获取参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始.注意,下面的变量(a b fuhao)即为代码文件的参数哦. 14 # 命令行参数以空格为分隔符 15 a = int(sys.argv[1]) 16 b = int(sys.argv[2]) 17 fuhao = sys.argv[3] 18 19 if fuhao == '+': 20 print(add(a, b)) 21 elif fuhao == '-': 22 print(sub(a, b)) 23 elif fuhao == '*': 24 print(mul(a, b)) 25 elif fuhao == '/': 26 print(div(a, b))
#13 归属地查询 输入手机号,匹配归属地(根据前七位)
1 string = '''5582|1860101|010|北京市|北京联通GSM卡 2 5583|1860100|010|北京市|北京联通GSM卡 3 5584|1368141|010|北京市|北京移动神州行卡 4 5585|1860111|010|北京市|北京联通GSM卡 5 5586|1358198|010|北京市|北京移动动感地带卡 6 5587|1361139|010|北京市|北京移动预付费卡 7 5588|1361138|010|北京市|北京移动神州行卡 8 5591|1360110|010|北京市|北京移动全球通卡 9 5748|1364110|010|北京市|北京移动神州行卡 10 10186|1581584|020|广东省广州市|广东移动全球通卡 11 15046|1391897|021|上海市|上海移动全球通卡 12 17250|1502207|022|天津市|天津移动全球通卡 13 21137|1345272|023|重庆市万州|重庆移动大众卡 14 22700|1347812|024|辽宁省沈阳市|辽宁移动大众卡 15 24256|1377065|025|江苏省南京市|江苏移动全球通卡 16 26360|1898606|027|湖北省武汉市|湖北电信CDMA卡 17 28709|1860802|028|四川省成都市|四川联通GSM卡 18 30641|1552961|029|陕西省西安市|陕西联通GSM卡 19 31700|1563007|0310|河北省邯郸市|河北联通GSM卡 20 33360|1583396|0311|河北省石家庄市|河北移动全球通卡 21 34825|1508122|0312|河北省保定市|河北移动全球通卡 22 35363|1551235|0313|河北省张家口|河北联通GSM卡 23 37700|1331326|0316|河北省廊坊市|河北电信CDMA卡 24 43500|1350358|0358|山西省吕梁市|山西移动全球通卡 25 43908|1553625|0359|山西省运城市|山西联通GSM卡 26 44521|1335360|0370|河南省商丘市|河南电信CDMA卡 27 50078|1509369|0378|河南省开封市|河南移动全球通卡 28 53603|1583981|0398|河南省三门峡|河南移动全球通卡 29 53916|1335897|0410|辽宁省铁岭市|辽宁电信CDMA卡 30 55248|1554254|0411|辽宁省大连市|辽宁联通GSM卡 31 58618|1374272|0427|辽宁省盘锦市|辽宁移动全球通卡 32 58932|1554183|0429|辽宁省葫芦岛|辽宁联通GSM卡 33 60268|1340475|0431|吉林省长春市|吉林移动大众卡 34 ''' 35 36 # 将字符串按照换行符进行切割 37 string_list = string.splitlines() 38 # 定义一个字典 39 area = {} 40 # 遍历每一行字符串,进行处理 41 for string in string_list: 42 # 将每一行字符串按照 | 切割 43 lt = string.split('|') 44 # 提取号码前7位 45 qianqi = lt[1] 46 # 提取归属地 47 guishu = lt[-1] 48 # 将号码前7位和归属地存放到字典中 49 area[qianqi] = guishu 50 # print(lt) 51 # break 52 53 # print(area) 54 # 写个小死循环,用来查询手机号码归属地 55 while 1: 56 phone = input('请输入您的手机号码:') 57 # 提取输入手机号码的前7位 58 qiqi = phone[0:7] 59 # 判断键是否在字典中 60 if qiqi in area: 61 print('归属地为:%s' % area[qiqi]) 62 else: 63 print('查无此号码')
#14 自己封装函数,实现相同于系统内置函数hex、oct、bin的功能 (以hex为例)
1 def my_hex(n): 2 lt = [] 3 while n: 4 5 n, yushu = divmod(n, 2) 6 # 循环结束条件n==0,break 7 # 请理解divmod()的内涵 8 9 # --> lt.append(yushu) 错误 10 # TypeError: sequence item 0: expected str instance, int found 11 lt.append(str(yushu)) 12 # 取余取反 13 lt.reverse() 14 return '0x'+ ''.join(lt) 15 16 print(my_hex(19))
#另外一种方法
1 def my_hex(n): 2 #格式化输出...呵呵 3 return '0x' + '%x' % n 4 5 print(my_hex(18))
浙公网安备 33010602011771号