《Python数据分析、挖掘与可视化》课后题答案

时间:2024-03-12 19:15:10

第二章课后题答案

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)