第二章課后題答案
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)
