《Python数据分析、挖掘与可视化》课后题答案
第二章课后题答案
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)