女神博客链接:https://www.cnblogs.com/Eva-J/articles/11214642.html#_label16
练习题
1、任一个英文的纯文本文件,统计其中的每个单词出现的个数,注意是每个单词。。
2、写函数,计算传入数字参数的和。(动态传参)
3、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
5、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容(对value的值进行截断),并将新内容返回给调用者,注意传入的数据可以是字符、list、dict
6、写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃A’)]
7、写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:minmax(2,5,7,8,4)
返回:{‘max’:8,’min’:2}
8、写函数,专门计算图形的面积
- 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
- 调用函数area(‘圆形’,圆半径) 返回圆的面积
- 调用函数area(‘正方形’,边长) 返回正方形的面积
- 调用函数area(‘长方形’,长,宽) 返回长方形的面积
#代码模板 def area(): def 计算长方形面积(): pass def 计算正方形面积(): pass def 计算圆形面积(): pass
9、写函数,传入一个参数n,返回n的阶乘
例如:cal(7) 返回计算7*6*5*4*3*2*1的结果
10、如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
portfolio = [
{‘name’: ‘IBM’, ‘shares’: 100, ‘price’: 91.1},
{‘name’: ‘AAPL’, ‘shares’: 50, ‘price’: 543.22},
{‘name’: ‘FB’, ‘shares’: 200, ‘price’: 21.09},
{‘name’: ‘HPQ’, ‘shares’: 35, ‘price’: 31.75},
{‘name’: ‘YHOO’, ‘shares’: 45, ‘price’: 16.35},
{‘name’: ‘ACME’, ‘shares’: 75, ‘price’: 115.65}
]
- 通过哪个内置函数可以计算购买每支股票的总价
- 用filter过滤出,单价大于100的股票有哪些
11、有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请将以字母“a”开头的元素的首字母改为大写字母;
12、有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请以列表中每个元素的第二个字母倒序排序;
13、有名为poetry.txt的文件,其内容如下,请删除第三行;
昔人已乘黄鹤去,此地空余黄鹤楼。 黄鹤一去不复返,白云千载空悠悠。 晴川历历汉阳树,芳草萋萋鹦鹉洲。 日暮乡关何处是?烟波江上使人愁。
14、有名为username.txt的文件,其内容格式如下,写一个程序,判断该文件中是否存在”alex”, 如果没有,则将字符串”alex”添加到该文件末尾,否则提示用户该用户已存在;
pizza alex egon
15、有名为user_info.txt的文件,其内容格式如下,写一个程序,删除id为100003的行;
pizza,100001 alex, 100002 egon, 100003
16、有名为user_info.txt的文件,其内容格式如下,写一个程序,将id为100002的用户名修改为alex li;
pizza,100001 alex, 100002 egon, 100003
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/21 上午10:48 # import copy # a = [1,2,3] # # b = a # b = copy.copy(a) # a.append(1) # a[0] = 8 # print(a) # print(b) # dic = {} # f = open(r'userinfo', # mode='r',encoding='utf-8') # # print(f.read()) # print(f.tell()) # 获取指针位置 # print(f.readline()) # print(f.seek(5)) # 指针定位 # print(f.tell()) # # 比较常用的第一种读方式 # for line in f: # line = line.strip() # if line:# 把空行也给去掉 # #print(line) # dic[line.split('|')[0]] = [line.split('|')[1] ,line.split('|')[2]] # print(dic) # f.close() # with open(r'userinfo',mode='r',encoding='utf-8') as f: # for line in f: # line = line.strip() # if line: # print(line) # a = 1 # b = 2 # c = 3 # # def func(): # ret = a * b / c # print(ret) # func() # def sum(a,b): # return a+b # ret = sum(1,3) # print(ret) # def func(a,b): # if a > b: # return a # else: # return b # print(func(2,5)) # 列表 、元组 、字符串、字典。求两个类型的长度比,返回数据长度更长的类型 # def mylen(seq): # i = 0 # for j in seq: # i += 1 # return i # # def compare(agr1,agr2): # if mylen(agr1) > mylen(agr2): # return agr1 # else: # return agr2 # # ret = compare([1,2,4],'fajdhkdfa') # print(ret) # # a = 1 # def func(): # global a # 尽量少用,一旦修改了全局变量,其他函数调用到它到时候,值也是会改变的 # a = a+1 # #print(a) # return a # print(func()) #################################分割线########################################################################## ''' 1、任一个英文的纯文本文件,统计其中的每个单词出现的个数,注意是每个单词。。 ''' # import collections # with open('English.txt','r') as fp: # str1=fp.read().split(' ') # b = collections.Counter(str1) # with open('result.txt','w') as result_file: # for key,value in b.items(): # result_file.write(key+':'+str(value)+'\n') # 方法二 # dic = {} # ch = '' # with open('English.txt',mode='r',encoding='utf-8') as f: # conten = f.read() # for line in conten: # if line.isalpha(): # ch += line # else: # if ch in dic: # dic[ch] +=1 # else: # dic[ch] = 1 # ch = '' # print(dic) ''' 2、写函数,计算传入数字参数的和。(动态传参) ''' # def cout(*args): # num = 0 # for i in args: # num += i # return num # print(cout(1,2,3,4,5)) ''' 3、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作 ''' # import os # def modifyFile(fileName,old,new): # try: # with open(fileName,mode='r',encoding='utf-8') as f1, open("%s.bak" % fileName,mode='w',encoding='utf-8') as f2: # for line in f1: # line = line.strip() # if old in line: # line = line.replace(old,new) # f2.write(line+'\n') # os.remove(fileName) # os.rename("%s.bak" % fileName,fileName) # except: # print('have no file!') # # modifyFile('userinfo','alex','wusir') # modifyFile('userinfo','10','20') ''' 4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。 ''' # def checkEmptyContent(args): # if isinstance(args,str): # for a in args: # if a.isspace(): # print('有空内容!') # break # else: # print('无空内容!') # else: # for i in args: # if i =='': # print('有空元素!') # break # else: # print('无空元素!') # checkEmptyContent('1232 43243') # checkEmptyContent('123243243') # checkEmptyContent(['a','','c']) # checkEmptyContent(('a','b','c')) ''' 5、写函数,检查传入字典的每一个value的长度,如果大于2, 那么仅保留前两个长度的内容(对value的值进行截断), 并将新内容返回给调用者,注意传入的数据可以是字符、list、dict ''' # def checkLen(args): # if isinstance(args,dict): # for k,v in args.items(): # #print(k,v) # if len(v)>2: # args[k] = v[:2] # elif isinstance(args,list): # for i in args: # if len(i)>2: # args[args.index(i)] = i[:2] # else: # if len(args)>2: # args = args[:2] # return args # # args = checkLen('aabbcc') # print(args) # args = checkLen(['11111','22','333']) # print(args) # args = checkLen({'k1':'1','k2':'222','k3':'33333333'}) # print(args) ''' 6、写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组 例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃A’)] ''' # def poker(): # poker_list = [] # for i in ['红心','草花','方块','黑桃']: # for j in range(1,13): # poker_list.append((i,j)) # else: # poker_list.append((i,'A')) # print(poker_list) # poker() # def poker(): # ranks = [2,3,4,5,6,7,8,9,10,'J','Q',"k",'A'] # coler = ['红心','草花','方块','黑桃'] # poker_list = [] # for i in coler: # for j in ranks: # poker_list.append((i,j)) # print(poker_list) # poker() ''' 7、写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值} 例如:minmax(2,5,7,8,4) 返回:{‘max’:8,’min’:2} ''' # def maxMin(*args): # dic = {} # dic['max'] = max(args) # dic['min'] = min(args) # print(dic) # return dic # maxMin(2,5,7,8,4) ''' 8、写函数,专门计算图形的面积 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积 调用函数area(‘圆形’,圆半径) 返回圆的面积 调用函数area(‘正方形’,边长) 返回正方形的面积 调用函数area(‘长方形’,长,宽) 返回长方形的面积 ''' # def area(*args): # def rectangularArea(l,w): # '''计算长方形面积''' # area = l*w # return area # # def squareArea(l): # '''计算正方形面积''' # area = l*l # return area # # def circularArea(r): # '''计算圆形面积''' # area = 3.14*r**2 # return area # area = 0 # if args[0] == '长方形': # area = rectangularArea(args[1],args[2]) # elif args[0] == '正方形': # area = squareArea(args[1]) # elif args[0] == '圆形': # area = circularArea(args[1]) # else: # print('暂时无该图形的计算!') # print('%s的面积为:%s' % (args[0],area)) # return area # # area('圆形',2) # area('正方形',4) # area('长方形',2,4) ''' 9、写函数,传入一个参数n,返回n的阶乘 例如:cal(7) 返回计算7*6*5*4*3*2*1的结果 ''' # def cal(n): # if n == 1: # return 1 # else: # return n * cal(n - 1) # print('7*6*5*4*3*2*1的结果为:',cal(7)) ''' 10、如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格 portfolio = [ {‘name’: ‘IBM’, ‘shares’: 100, ‘price’: 91.1}, {‘name’: ‘AAPL’, ‘shares’: 50, ‘price’: 543.22}, {‘name’: ‘FB’, ‘shares’: 200, ‘price’: 21.09}, {‘name’: ‘HPQ’, ‘shares’: 35, ‘price’: 31.75}, {‘name’: ‘YHOO’, ‘shares’: 45, ‘price’: 16.35}, {‘name’: ‘ACME’, ‘shares’: 75, ‘price’: 115.65} ] 通过哪个内置函数可以计算购买每支股票的总价 用filter过滤出,单价大于100的股票有哪些 ''' # portfolio = [ # {'name': 'IBM', 'shares': 100, 'price': 91.1}, # {'name': 'AAPL', 'shares': 50, 'price': 543.22}, # {'name': 'FB', 'shares': 200, 'price': 21.09}, # {'name': 'HPQ', 'shares': 35, 'price': 31.75}, # {'name': 'YHOO', 'shares': 45, 'price': 16.35}, # {'name': 'ACME', 'shares': 75, 'price': 115.65} # ] # # 通过哪个内置函数可以计算购买每支股票的总价 # ret = map(lambda dic : {dic['name']:round(dic['shares']*dic['price'],2)},portfolio) # print(list(ret)) # # 用filter过滤出,单价大于100的股票有哪些 # ret = filter(lambda dic:True if dic['price'] > 100 else False,portfolio) # print(list(ret)) ''' 11、有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请将以字母“a”开头的元素的首字母改为大写字母; ''' # li = ['alex','egon','smith','pizza','alen'] # for i in li: # if i.startswith('a'): # li[li.index(i)] = i.capitalize() # 首字母大写 # #li[li.index(i)] = i.replace('a','A') # print(li) # # ''' 12、有列表 li = [‘alex’, ‘egon’, ‘smith’, ‘pizza’, ‘alen’], 请以列表中每个元素的第二个字母倒序排序 ''' li = ['alex','egon','smith','pizza','alen'] ''' 13、有名为poetry.txt的文件,其内容如下,请删除第三行; 昔人已乘黄鹤去,此地空余黄鹤楼。 黄鹤一去不复返,白云千载空悠悠。 晴川历历汉阳树,芳草萋萋鹦鹉洲。 日暮乡关何处是?烟波江上使人愁。 ''' # with open('poetry.txt',mode='r',encoding='utf-8') as f1, open('poetry.txt.bak',mode='w') as f2: # n = 0 # for line in f1: # if line.strip(): # n += 1 # if n != 3: # f2.write(line+'\n') # # import os # os.remove('poetry.txt') # os.rename('poetry.txt.bak','poetry.txt') # ''' 14、有名为username.txt的文件,其内容格式如下,写一个程序,判断该文件中是否存在”alex”, 如果没有,则将字符串”alex”添加到该文件末尾,否则提示用户该用户已存在; pizza alex egon ''' # with open('username.txt',mode='r',encoding='utf-8') as f: # for line in f: # if line.strip() and 'alex' in line: # print('用户已存在!') # break # else: # with open('username.txt',mode='a',encoding='utf-8') as f2: # f2.write('alex\n') ''' 15、有名为user_info.txt的文件,其内容格式如下,写一个程序,删除id为100003的行; pizza,100001 alex, 100002 egon, 100003 ''' # # with open('user_info.txt',mode='r',encoding='utf-8') as f1,open('user_info.txt.bak',mode='w') as f2: # for line in f1: # if line.strip(): # #print(line) # if '100003' in line: # continue # f2.write(line) # import os # os.remove('user_info.txt') # os.rename('user_info.txt.bak','user_info.txt') ''' 16、有名为user_info.txt的文件,其内容格式如下,写一个程序,将id为100002的用户名修改为alex li; pizza,100001 alex, 100002 egon, 100003 ''' # with open('user_info.txt',mode='r',encoding='utf-8') as f1,open('user_info.txt.bak',mode='w') as f2: # for line in f1: # if line.strip(): # #print(line) # if '100002' in line: # name = line.split(',')[0] # line = line.replace(name,'alex li') # f2.write(line) # import os # os.remove('user_info.txt') # os.rename('user_info.txt.bak','user_info.txt') #
作业
1.股票查询程序开发
把以下股票数据存入stock_data.txt

数据来源:东方财富网
开发程序对stock_data.txt进行以下操作:
1.程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)
2.允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
3.允许按股票价格、涨跌幅、换手率这几列来筛选信息,比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。
思路提示:加载文件内容到内存,转成dict or list结构,然后对dict or list 进行查询等操作。 这样以后就不用每查一次就要打开一次文件了,效率会高。
# -*- coding:utf-8 -*- # caiqinxiong # 2019/7/21 下午10:30 def getData(): '''获取源数据''' stock_data_list = [] with open(r'stock_data.txt', mode='r', encoding='utf-8') as f: print('~' * 160) head = f.readline().split() stock_data_list.append(head) # 打印表头,中文字符比英文字符大啊!!!,为了打印输出美观点,只能分开打印了 for i in head: print(i.center(6,' '),end='|') print() for line in f: line = line.strip() if line: #print(line.split()) for j in line.split(): print(j.center(8),end='|') print() #print('|'.join(line.split())) stock_data_list.append(line.split()) print('~' * 160) return stock_data_list def changeData(data): '''数据转换''' if not data.find('万') < 0: data = float(data.split('万')[0]) * 10000 elif not data.find('亿') < 0: data = float(data.split('亿')[0]) * 100000000 elif not data.find('%') < 0: data = float(data.split('%')[0]) * 0.01 else: if data.isdigit() or data.split(".")[1].isdigit(): return float(data) else: print('输入有误啊!') return data return data def printList(listData): '''打印列表''' if len(listData) == 0: print('\033[31;1m无查询结果!\033[0m') else: print('一共搜索到\033[31;1m%s\033[0m条结果,详情如下:' % len(listData)) print('~' * 100) for i in data_list[0]: print(i.center(5,' '),end='|') print() for j in listData: #print(j.center(5,' '),end='|') for k in j: print(k.center(7,' '),end='|') print() print('~' * 100) def compareData(compare, num, index, data_list): '''比较查询''' num_list = [] # 获取比较完成数据,添加到列表里 for i in range(1, len(data_list)): if compare == '<': if changeData(data_list[i][int(index)]) < float(num): num_list.append(data_list[i]) else: if changeData(data_list[i][int(index)]) > float(num): num_list.append(data_list[i]) # 打印比较结果 printList(num_list) def stockFinder(*args): '''比较查找数据''' # print(args) name = args[0][0] data_list = args[-1][-1] try: compare = args[0][1] # 比较符号 num = args[0][2] # 比较数据 # 获取输入项名称,支持模糊查找 for i in data_list[0]: if not i.find(name) < 0: index = data_list[0].index(i) # 获取该名称对应的index值 compareData(compare, num, index, data_list) except: find_data = [] # 模糊查找 for i in range(1, len(data_list)): if not data_list[i][2].find(name) < 0: find_data.append(data_list[i]) # 打印查找结果 printList(find_data) def checkArgs(data_list): '''校验传入参数''' choise = input('股票查询接口(按q退出)>>:').strip() if not choise.find('>') < 0: name = choise.split('>')[0].strip() num = choise.split('>')[-1].strip() num = changeData(num) return name, '>', num, data_list elif not choise.find('》') < 0: name = choise.split('》')[0].strip() num = choise.split('》')[-1].strip() num = changeData(num) return name, '>', num, data_list elif not choise.find('<') < 0: name = choise.split('<')[0].strip() num = choise.split('<')[-1].strip() num = changeData(num) return name, '<', num, data_list elif not choise.find('《') < 0: name = choise.split('《')[0].strip() num = choise.split('《')[-1].strip() num = changeData(num) return name, '<', num, data_list elif choise.upper() == 'Q': print('\033[34;1m谢谢使用!\033[0m') exit(-1) elif choise == '': #print('\033[31;1m请输入内容!\033[0m') return 'continue' else: return choise, data_list if __name__ == '__main__': print('欢迎使用股票查询系统,所有数据信息如下:') data_list = getData() while True: args = checkArgs(data_list) stockFinder(args)
序号 代码 名称 最新价 涨跌幅 涨跌额 成交量(手) 成交额 振幅 最高 最低 今开 昨收 量比 换手率 市盈率(动态) 市净率
1 603256 N宏和 6.38 44.02% 1.95 949 60.16万 23.93% 6.38 5.32 5.32 4.43 2 0.11% 46.16 3.81
2 300179 四方达 5.68 10.08% 0.52 32.86万 1.84亿 8.33% 5.68 5.25 5.34 5.16 2 9.81% 27.86 3.30
3 002201 九鼎新材 8.09 10.07% 0.74 3.86万 3123.70万 0.00% 8.09 8.09 8.09 7.35 3 1.16% 263.97 2.98
4 000011 深物业A 10.63 10.04% 0.97 7.41万 7709.58万 9.83% 10.63 9.68 9.68 9.66 2 1.41% 20.19 1.96
5 002639 雪人股份 8.55 10.04% 0.78 29.90万 2.54亿 3.73% 8.55 8.26 8.30 7.77 2 5.62% 628.44 2.55
6 600281 太化股份 5.81 10.04% 0.53 29.74万 1.68亿 9.47% 5.81 5.31 5.49 5.28 2 5.78% -86.72 6.98
7 002199 东晶电子 12.73 10.03% 1.16 8.71万 1.08亿 9.77% 12.73 11.60 11.70 11.57 1 3.58% -156.06 8.22
8 300191 潜能恒信 24.92 10.02% 2.27 5356 1334.77万 0.00% 24.92 24.92 24.92 22.65 0 0.26% 472.36 6.77
9 002362 汉王科技 16.58 10.02% 1.51 10.30万 1.68亿 10.15% 16.58 15.05 15.20 15.07 6 5.75% -110.06 4.16
10 300648 星云股份 20.10 10.02% 1.83 13.76万 2.66亿 8.76% 20.10 18.50 18.50 18.27 2 22.92% 389.14 5.13
11 300783 三只松鼠 34.05 10.02% 3.10 2328 792.85万 0.00% 34.05 34.05 34.05 30.95 3 0.57% 13.69 7.16
12 300023 宝德股份 7.36 10.01% 0.67 5.87万 4264.41万 9.57% 7.36 6.72 6.72 6.69 1 4.07% -9.21 5.37
13 300575 中旗股份 26.38 10.01% 2.40 5.16万 1.32亿 9.92% 26.38 24.00 24.19 23.98 1 7.98% 11.64 2.87
14 300785 值得买 59.91 10.01% 5.45 452 270.79万 0.00% 59.91 59.91 59.91 54.46 2 0.34% 44.03 4.73
15 603236 移远通信 84.21 10.01% 7.66 876 738.00万 0.00% 84.21 84.21 84.21 76.55 2 0.39% 41.61 4.69
16 000669 金鸿控股 4.62 10.00% 0.42 4.46万 2060.37万 0.00% 4.62 4.62 4.62 4.20 1 0.67% -10.44 1.28
17 300526 中潜股份 22.35 9.99% 2.03 8.61万 1.88亿 11.71% 22.35 19.97 20.04 20.32 1 14.33% 541.52 7.02
18 300708 聚灿光电 14.21 9.98% 1.29 9.90万 1.39亿 9.29% 14.21 13.01 13.10 12.92 1 11.32% 237.16 5.03
19 300488 恒锋工具 17.30 9.98% 1.57 1.81万 3098.39万 11.13% 17.30 15.55 15.73 15.73 1 3.68% 33.09 3.12
20 601236 红塔证券 12.91 9.97% 1.17 18.69万 2.41亿 0.00% 12.91 12.91 12.91 11.74 6 5.13% 121.38 3.68
股票查询程序使用说明: 1、程序需要在python 3.X版本下运行 2、程序主要有两大功能 (1)、支持模糊查找名称 例如输入"红塔",则查询出相关数据。 股票查询接口(按q退出)>>:红塔 一共搜索到1条结果,详情如下: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 序号|代码|名称|最新价|涨跌幅|涨跌额|成交量(手)|成交额|振幅|最高|最低|今开|昨收|量比|换手率|市盈率(动态)|市净率 20|601236|红塔证券|12.91|9.97%|1.17|18.69万|2.41亿|0.00%|12.91|12.91|12.91|11.74|6|5.13%|121.38|3.68 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (2)、比较查询功能,支持模糊查询,支持中文的'《' 和 '》'。 例如输入"市盈率 < 0",则查询出相关数据。 股票查询接口(按q退出)>>:市盈率 < 0 一共搜索到5条结果,详情如下: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 序号|代码|名称|最新价|涨跌幅|涨跌额|成交量(手)|成交额|振幅|最高|最低|今开|昨收|量比|换手率|市盈率(动态)|市净率 6|600281|太化股份|5.81|10.04%|0.53|29.74万|1.68亿|9.47%|5.81|5.31|5.49|5.28|2|5.78%|-86.72|6.98 7|002199|东晶电子|12.73|10.03%|1.16|8.71万|1.08亿|9.77%|12.73|11.60|11.70|11.57|1|3.58%|-156.06|8.22 9|002362|汉王科技|16.58|10.02%|1.51|10.30万|1.68亿|10.15%|16.58|15.05|15.20|15.07|6|5.75%|-110.06|4.16 12|300023|宝德股份|7.36|10.01%|0.67|5.87万|4264.41万|9.57%|7.36|6.72|6.72|6.69|1|4.07%|-9.21|5.37 16|000669|金鸿控股|4.62|10.00%|0.42|4.46万|2060.37万|0.00%|4.62|4.62|4.62|4.20|1|0.67%|-10.44|1.28 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3、单位换算 (1)、对'万'和'亿'的换算,输入时可以直接输入数字,也可带单位。 (2)、对'%'的换算,输入时可以直接输入小数,也可带%。 4、异常处理 (1)、空格、回车处理 (2)、无效输入处理 5、作业难点 这次作业花最多的时间就是在处理打印结果上了,找了好多方法,想把打印结果整得美观些。包括想用一些依赖工具prettytable来实现这个效果, 但是考虑到老师您也不一定有安装了这个工具,就放弃了,打印结果没法对齐的主要原因是中文字的大小和英文不一样,尽管是一样的字符长度,展现 出来的效果也不一样。导致使用了好多for循环来打印输出。不花费太多时间研究这个了,重点是把函数的应用get到就中啦。
2.递归二分查找
请https://www.cnblogs.com/Eva-J/articles/7197403.html根据博客学习二分查找算法。
并自己找一个递归相关的练习题进行练习,上交题目和代码。
# -*- coding: utf-8 -*- __author__ = 'caiqinxiong_cai' # 2019/7/25 15:18 ''' 斐波那契数列指的是1、1、2、3、5、8、13、21、···这样一个数列,我们可以发现它后面的一个数是前两个数之和 递归实现n个斐波那契数列: ''' # def fibonacci(n): # if n == 0: # return 0 # elif n == 1: # return 1 # else: # return fibonacci(n-1) + fibonacci(n-2) # print('20个斐波那契数列为:') # for i in range(1,21): # print(fibonacci(i),end=' ') ''' 利用递归求解n的阶乘: ''' def func(n): if n == 1: return 1 else: return n * func(n - 1) for i in range(1, 10): print('%s!的阶乘为:%s'% (i,func(i))) ''' 利用递归来求解 汉诺塔 ''' # def Hanoi(n, a, b, c): # if(n == 1): # print(a,"-->",c) # return # Hanoi(n-1, a, c, b) # Hanoi(1, a, b, c) # Hanoi(n-1, b, a, c) # # print('~'*10) # # Hanoi(5, "A", "B", "C")

浙公网安备 33010602011771号