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