第二章课后题答案
1.输入一个包含若干自然数的列表,输出这些自然数的平均值,结果保留3位小数。
ls=eval(input()) ans=float(sum(ls)/len(ls)) print(\'{:.3f}\'.format(ans))
2.输入一个包含若干自然数的列表,输出这些自然数降序排列后的新列表。
ls=eval(input()) ls=sorted(ls,reverse=True) print(ls)
3.输入一个包含若干自然数的列表,输出一个新列表,新列表中每个元素为原列表中每个自然数的位数。
ls=eval(input()) ans=list() for i in ls: st=str(i) ans.append(len(st)) print(ans)
4.输入一个包含若干数字的列表,输出其中绝对值最大的数字。
ls=eval(input()) m=ls[0] for i in ls: if abs(i)>m: m=i print(m)
5.输入一个包含若干整数的列表,输出这些整数的乘积。
ls=eval(input()) ans=1 for i in ls: ans*=i print(ans)
6.输入两个包含若干整数的等长列表,把这两个列表看作两个向量,输出这两个向量的内积。
ls1=eval(input()) ls2=eval(input()) ans=0 for i in range(min(len(ls1),len(ls2))): ans+=ls1[i]*ls2[i] print(ans)
第三章课后题答案
1.输入一个字符串,输出其中每个字符的出现次数。(用Counter类)
2.输入一个字符串,输出其中只出现了一次的字符及其下标。
3.输入一个字符串,输出其中每个唯一字符最后一次出现的下标。
4.输入包含若干集合的列表,输出这些集合的并集。(用reduce()函数和operator模块)
5.输入一个字符串,输出加密后的结果字符串。加密规则:每个字符的Unicode编码和下一个字符的Unicode编码相减,用这个差的绝对值作为Unicode编码,对应的字符作为当前位置上字符的加密结果,最后一个字符和第一个字符进行运算。
6.输入一个字符串,判断是否回文。(用切片)
第四章课后题答案
1.接收一个正整数作为参数,返回对其进行因数分解后的结果列表。
num = int(input()) ls = [] i=2 while i!=num: if num % i == 0: num /= i ls.append(i) i=2 else: i=i+1 ls.append(i) print(ls)
2.接收两个正整数参数n和a(要求a为小于10的自然数),计算形式如a+aa+aaa+....+aa....aaa的表达式前n项的值。
a,n=input().split() a,n=int(a),int(n) sum,tmp=0,a for i in range(n): sum+=tmp tmp=tmp*10+a print(sum)
3.模拟报数游戏。有n个人围成一圈,从0到n-1按顺序编号,从第一个人开始从1到k报数,报到k的人推出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的几号。
n,k=input().split() n,k=int(n),int(k)-1 ls=[i for i in range(n)] while n > k+1: ls.pop(k) for i in range(k): a=ls.pop(0) ls.append(a) n = n-1 while n>1: tmp = k % n ls.pop(tmp) for i in range(k): a=ls.pop(0) ls.append(a) n = n - 1 print(ls)
4.接收一个字符串作为参数,判断该字符串是否回文。
st=input() l,f=len(st),1 for i in range(l): if st[i]!=st[l-i-1]: f=0 break if f==0: print("False") else: print("True")
第五章课后题答案
#例题1.
合并两个.txt文件内容(交替写)
f1 = open(\'D:pywork/eg1_1.txt\',encoding=\'UTF-8\') f2 = open(\'D:pywork/eg1_2.txt\',encoding=\'UTF-8\') with open(\'D:pywork/eg1_ans.txt\',\'w\') as fp: with f1,f2: while True: line=f1.readline() if line: print(\'1 .txt:\',line) fp.write(line) else: flag=1 break line=f2.readline() if line: print(\'2 .txt:\',line) fp.write(line) else: flag=0 break f3 = f1 if flag == 0 else f2 h = 1 if flag == 0 else 2 for line in f3: print(h,\'.txt:\',line) fp.write(line)
#例题2.
把信息写入JSON文件,再读取并输出
import json infor=[ {\'小区名称\':\'小区A\',\'均价\':8000,\'月交易量\':20}, {\'小区名称\':\'小区B\',\'均价\':8500,\'月交易量\':35}, {\'小区名称\':\'小区C\',\'均价\':7800,\'月交易量\':50}, {\'小区名称\':\'小区D\',\'均价\':12000,\'月交易量\':18} ] with open(\'D:pywork/eg2_房价信息.json\',\'w\') as f: json.dump(infor,f,indent=4,separators=[\',\',\':\']) #indent表示缩进,一般写为4 or 2 #separators(元素之间用\'逗号\'隔开,key和内容之间用\'冒号\'隔开) with open(\'D:pywork/eg2_房价信息.json\') as f: info=json.load(f) for i in info: print(i)
#例题3.
模拟生成饭店自2020年1月1日开始,连续100天试营业期间营业额数据写入CSV文件。两列,日期 + 营业额为表头,基础营业额为500,每天增加5 + 5~50元。
from csv import reader,writer from random import randrange from datetime import date,timedelta with open(\'D:pywork/eg3_data.csv\',\'w\') as f: w=writer(f) w.writerow([\'日期\',\'销量\']) Date=date(2020,1,1) for i in range(100): amount = 500 + i*5 + randrange(5,50) w.writerow([str(Date) , amount]) Date = Date + timedelta(days=1) with open(\'D:pywork/eg3_data.csv\',\'r\') as f: for line in reader(f): if line: print(*line)
#操作题4.
求超市营业额 1.xlsx 中每个员工的销售总额、每个时段的销售总额、每个柜台的销售总额
from openpyxl import load_workbook persons,periods,goods = dict(),dict(),dict() sheet = load_workbook(\'D:pywork/test4_超市营业额.xlsx\').worksheets[0] for index,row in enumerate(sheet.rows): #index获取行标,row获取表格元组 if index == 0: continue #跳过列标 _, name, _, time, num, good = map(lambda cell:cell.value,row) #映射row,读取员工、时段、金额、柜台 persons[name] = persons.get(name,0) + num periods[time] = periods.get(time,0) + num goods[good] = goods.get(good,0) + num print(persons,periods,goods,sep=\'\n\')
#操作题5.
追加一列将 每个人的爱好.xlsx 的内容汇总
from openpyxl import load_workbook exl=load_workbook(\'D:pywork/test5_每个人的爱好.xlsx\') sheet=exl.worksheets[0] tmp = dict() for index,row in enumerate(sheet.rows): if index == 0: title = tuple(map(lambda cell:cell.value,row))[1:] #获取所有爱好 add = len(title) + 2 sheet.cell(index + 1, add, value = \'所有爱好\') else: name = row[0].value #读个名字 val = tuple(map(lambda cell:cell.value,row))[1:] result = \',\'.join((title[i] for i , v in enumerate(val) if v == \'是\')) sheet.cell(index + 1, add, value = result) tmp[name] = result exl.save(\'D:pywork/test5_每个人的爱好.xlsx\') print(tmp)