洋洋灑灑蛔溃,就這樣,我正式進入了學(xué)習(xí)python的坑篱蝇,沒想到學(xué)過c贺待,C++,java之后零截,即將入新坑麸塞。自從不寫程序,好像每次都很難靜下來瞻润,迷茫了許久喘垂,這一次學(xué)習(xí)python 好像又重新找回了那種能夠沉浸下來學(xué)習(xí)的感覺,就像以前一樣绍撞。
繼上次的變量及數(shù)值類型正勒、序列及通用操作,接下來主要是字典映射傻铣、條件判斷及循環(huán)語句章贞、函數(shù)、模塊與包以及數(shù)據(jù)的讀寫五部分非洲。
字典映射:字典映射幕布地址
條件判斷及循環(huán)語句:條件判斷及循環(huán)語句
函數(shù):函數(shù)
模塊與包:模塊與包
數(shù)據(jù)的讀與寫:數(shù)據(jù)的讀與寫
小項目整理:
【項目01】 商鋪數(shù)據(jù)加載及存儲 作業(yè)要求:
1鸭限、成功讀取“商鋪數(shù)據(jù).csv”文件
2、解析數(shù)據(jù)两踏,存成列表字典格式:[{'var1':value1,'var2':value2,'var3':values,...},...,{}]
3败京、數(shù)據(jù)清洗:
????① comment,price兩個字段清洗成數(shù)字
????② 清除字段缺失的數(shù)據(jù)
????③ commentlist拆分成三個字段梦染,并且清洗成數(shù)字
4赡麦、結(jié)果存為.pkl文件
#讀取數(shù)據(jù)
f = open(r'E:\自我管理\數(shù)據(jù)分析\數(shù)據(jù)分析python\課件\CLASSDATA_ch02基礎(chǔ)語言入門:從零開始學(xué)習(xí)Python\商鋪數(shù)據(jù).csv',
? ? ? ? 'r',encoding = 'utf8')
for i in f.readlines()[:5]:
? ? print(i.split(','))
f.seek(0)
f.close()
print("讀取完成")
#comment字段清洗為數(shù)字
def fcm(s):
? ? if '條' in s:
? ? ? ? return int(s.split(' ')[0])
? ? else:
? ? ? ? return '缺失數(shù)據(jù)'
#price清洗為數(shù)字
def fpr(s):
? ? if '¥' in s:
? ? ? ? return float(s.split('¥')[-1])
? ? else:
? ? ? ? return? '缺失數(shù)據(jù)'
#commentlist拆分為三個字段并清洗為數(shù)字
def fcl(s):
? ? if ' ' in s:
? ? ? ? quality = float(s.split()[0][2:])
? ? ? ? environment = float(s.split()[1][2:])
? ? ? ? service = float(s.split()[2][2:-1])
? ? ? ? return [quality,environment,service]
? ? else:
? ? ? ? return? '缺失數(shù)據(jù)'
#解析數(shù)據(jù)
f = open('E:\\自我管理\\數(shù)據(jù)分析\\數(shù)據(jù)分析python\\課件\\CLASSDATA_ch02基礎(chǔ)語言入門:從零開始學(xué)習(xí)Python\\商鋪數(shù)據(jù).csv',
? ? ? ? 'r',encoding = 'utf8')
datalst = []? # 創(chuàng)建空列表朴皆,用于存儲字典格式的數(shù)據(jù)
n = 0? # 創(chuàng)建計數(shù)變量
for i in f.readlines():
? ? data = i.split(',')? #將該行數(shù)據(jù)按','分離開
? ? classify = data[0]? ? ? ? ? ? # 提取分類
? ? name = data[1]? ? ? ? ? ? ? ? # 提取店鋪名稱
? ? comment_count = fcm(data[2])? # 提取評論數(shù)量
? ? star = data[3]? ? ? ? ? ? ? ? # 提取星級
? ? price = fpr(data[4])? ? ? ? ? # 提取人均
? ? add = data[5]? ? ? ? ? ? ? ? ? # 提取地址
? ? qua = fcl(data[6])[0]? ? ? ? ? # 提取質(zhì)量評分
? ? env = fcl(data[6])[1]? ? ? ? ? # 提取環(huán)境評分
? ? ser = fcl(data[6])[2]? ? ? ? ? # 提取服務(wù)評分
? ? if? '缺失數(shù)據(jù)' not in [comment_count, price, qua]:? # 用于判斷是否有數(shù)據(jù)缺失
? ? ? ? n += 1
? ? ? ? data_re = [['classify',classify],
? ? ? ? ? ? ? ['name',name],
? ? ? ? ? ? ? ['comment_count',comment_count],
? ? ? ? ? ? ? ['star',star],
? ? ? ? ? ? ? ['price',price],
? ? ? ? ? ? ? ['address',add],
? ? ? ? ? ? ? ['quality',qua],
? ? ? ? ? ? ? ['environment',env],
? ? ? ? ? ? ? ['service',ser]]
? ? ? ? datalst.append(dict(data_re))? # 生成字典,并存入列表datalst
? ? ? ? print('成功加載%i條數(shù)據(jù)' %n)
? ? else:
? ? ? ? continue
print(datalst)
print('總共加載%i條數(shù)據(jù)' %n)
#數(shù)據(jù)存儲.pkl數(shù)據(jù)
import pickle
pic = open('E:\\自我管理\\數(shù)據(jù)分析\\數(shù)據(jù)分析python\\課件\\CLASSDATA_ch02基礎(chǔ)語言入門:從零開始學(xué)習(xí)Python\\data.pkl','wb')
pickle.dump(datalst,pic)
pic.close()
print('finished!')
#讀取pickle
pic = open( 'E:\\自我管理\\數(shù)據(jù)分析\\數(shù)據(jù)分析python\\課件\\CLASSDATA_ch02基礎(chǔ)語言入門:從零開始學(xué)習(xí)Python\\data.pkl', 'rb')
st = pickle.load(pic)
print(st)
pic.close()
項目02
# 題目1:有1泛粹、2遂铡、3、4個數(shù)字晶姊,能組成多少個互不相同且無重復(fù)數(shù)字的兩位數(shù)扒接?都是多少?
# 該題目不用創(chuàng)建函數(shù)
lst = [1,2,3,4]
m = []
n = 0
for i in range(len(lst)):
? ? for j in range(len(lst)):
? ? ? ? if j != i:? #無重復(fù)數(shù)字
? ? ? ? ? ? n += 1
? ? ? ? ? ? m.append(str(lst[i])+str(lst[j]))
? ? ? ? else:
? ? ? ? ? ? continue
print('能組成%i個互不相同且無重復(fù)數(shù)字的兩位數(shù)们衙,\n分別是:'%n)
for i in range(len(m)):
? ? print(m[i])
# 題目2:輸入三個整數(shù)x,y,z钾怔,請把這三個數(shù)由小到大輸出,可調(diào)用input()蒙挑。(需要加判斷:判斷輸入數(shù)據(jù)是否為數(shù)字)
# 提示:判斷是否為數(shù)字:.isdigit()
# 該題目需要創(chuàng)建函數(shù)
def f():
? ? lst = []
? ? for i in range(1,4):
? ? ? ? m = input('請輸入第%i個數(shù)字:'%i)
? ? ? ? while m.isdigit() == False:
? ? ? ? ? ? m = input('輸入為非數(shù)字字符蒂教,請重新輸入第%i個數(shù)字:'%i)
? ? ? ? else:
? ? ? ? ? ? lst.append(int(m))
? ? lst.sort()
? ? print('輸入的三個數(shù)字由小到大排列是:',lst)
f()
# 題目3:輸入一行字符,分別統(tǒng)計出其中英文字母脆荷、空格、數(shù)字和其它字符的個數(shù)懊悯。
# 提示:利用while語句,條件為輸入的字符不為'\n'.
# 該題目不需要創(chuàng)建函數(shù)
strs= list(input('請輸入任意字符:'))? ? #輸入字符串
count = len(strs)
int_count = 0? ? #數(shù)字字符個數(shù)
str_count = 0? ? #英文字母個數(shù)
space_count = 0? #空格個數(shù)
other_count = 0? ? #其他字符個數(shù)
for i in range(count):
? ? count = len(strs)
? ? while strs[i] == '\\':
? ? ? ? if strs[i+1] == 'n':
? ? ? ? ? ? strs = list(input('輸入字符有"\\n"蜓谋,不能繼續(xù)進行,請重新輸入L糠帧桃焕!'))
? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? other_count +=1
? ? ? ? ? ? break
? ? ? ? break
? ? else:
? ? ? ? if strs[i].isalpha():
? ? ? ? ? ? str_count += 1
? ? ? ? elif strs[i].isspace():
? ? ? ? ? ? space_count += 1
? ? ? ? elif strs[i].isdigit():
? ? ? ? ? ? int_count += 1
? ? ? ? else:
? ? ? ? ? ? other_count +=1
print('輸入的字符串為:%s, '%strs,'字符總數(shù)為:%d'%count)
print ('該字符串中的字符有:%d '%str_count)
print ('該字符串中的數(shù)字有:%d' %int_count)
print ('該字符串中的空格有:%d '%space_count)
print ('該字符串中的特殊字符有:%d' %other_count)
# 題目4:猴子吃桃問題
# 猴子第一天摘下若干個桃子,當(dāng)即吃了一半捧毛,還不癮观堂,又多吃了一個,
# 第二天早上又將剩下的桃子吃掉一半,又多吃了一個呀忧。
# 以后每天早上都吃了前一天剩下的一半零一個师痕。到第10天早上想再吃時,見只剩下一個桃子了而账。求第一天共摘了多少?
# 提示:采取逆向思維的方法胰坟,從后往前推斷。
# 該題目不需要創(chuàng)建函數(shù)
#思路為:第10天還沒吃之前的桃子數(shù)量初始化 p = 1泞辐,之后從9至1循環(huán)9次笔横,
#根據(jù)上述公式反推為 p = (p+1) * 2 可得第1天還沒吃之前的桃子數(shù)量。
p = 1
print('第10天吃之前就剩1個桃子')
for i in range(1, 10):
? ? p = (p+1) * 2
? ? print('第%s天吃之前還有%s個桃子' % (10-i, p))
print('\n第1天共摘了%s個桃子' % p)
# 題目5:猜數(shù)字問題咐吼,要求如下:
# ① 隨機生成一個整數(shù)
# ② 猜一個數(shù)字并輸入
# ③ 判斷是大是小吹缔,直到猜正確
# ④ 判斷時間
# 提示:需要用time模塊、random模塊
# 該題目不需要創(chuàng)建函數(shù)
import time
import random
while True:? #循環(huán)執(zhí)行游戲詢問
? ? play_or_not = input('是否要進行游戲:是 or 否锯茄?')
? ? while play_or_not == '是':
? ? ? ? print('\n******游戲開始******\n')
? ? ? ? c = time.time()
? ? ? ? a = int(input('請輸入猜數(shù)范圍的下界(整數(shù)):'))
? ? ? ? b = int(input('請輸入猜數(shù)范圍的上界(整數(shù)):'))
? ? ? ? num = random.randint(a,b)
? ? ? ? x = int(input('請輸入范圍為[%i,%i]的一個整數(shù):'%(a,b)))
? ? ? ? while x != num:
? ? ? ? ? ? if x > num:
? ? ? ? ? ? ? ? b = x
? ? ? ? ? ? ? ? x = int(input('大了厢塘,請重新輸入[%i,%i]的整數(shù):'%(a,x)))
? ? ? ? ? ? else :
? ? ? ? ? ? ? ? a = x
? ? ? ? ? ? ? ? x = int(input('小了,請重新輸入[%i,%i]的整數(shù):'%(x,b)))
? ? ? ? else:
? ? ? ? ? ? print('恭喜你,猜對了K锥场礁叔!')
? ? ? ? ? ? b = time.time()
? ? ? ? usedtime = b-c
? ? ? ? print('總用時為:%.2f s'%usedtime)
? ? ? ? break
? ? else:
? ? ? ? break
語言的魅力真的是無窮無盡的,你可以用你的想法去完善和拓展一個點迄薄,相似又不同琅关,有時看似只是加了一句簡單的話語,但是其實已經(jīng)完全改變了程序的功能讥蔽,這也許就是越進行涣易,越是樂在其中吧。