洋洋洒洒,就这样,我正式进入了学习python的坑,没想到学过c,C++,java之后,即将入新坑。自从不写程序,好像每次都很难静下来,迷茫了许久,这一次学习python 好像又重新找回了那种能够沉浸下来学习的感觉,就像以前一样。
继上次的变量及数值类型、序列及通用操作,接下来主要是字典映射、条件判断及循环语句、函数、模块与包以及数据的读写五部分。
字典映射:字典映射幕布地址
条件判断及循环语句:条件判断及循环语句
函数:函数
模块与包:模块与包
数据的读与写:数据的读与写
小项目整理:
【项目01】 商铺数据加载及存储 作业要求:
1、成功读取“商铺数据.csv”文件
2、解析数据,存成列表字典格式:[{'var1':value1,'var2':value2,'var3':values,...},...,{}]
3、数据清洗:
① comment,price两个字段清洗成数字
② 清除字段缺失的数据
③ commentlist拆分成三个字段,并且清洗成数字
4、结果存为.pkl文件
#读取数据
f = open(r'E:\自我管理\数据分析\数据分析python\课件\CLASSDATA_ch02基础语言入门:从零开始学习Python\商铺数据.csv',
'r',encoding = 'utf8')
for i in f.readlines()[:5]:
print(i.split(','))
f.seek(0)
f.close()
print("读取完成")
#comment字段清洗为数字
def fcm(s):
if '条' in s:
return int(s.split(' ')[0])
else:
return '缺失数据'
#price清洗为数字
def fpr(s):
if '¥' in s:
return float(s.split('¥')[-1])
else:
return '缺失数据'
#commentlist拆分为三个字段并清洗为数字
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 '缺失数据'
#解析数据
f = open('E:\\自我管理\\数据分析\\数据分析python\\课件\\CLASSDATA_ch02基础语言入门:从零开始学习Python\\商铺数据.csv',
'r',encoding = 'utf8')
datalst = [] # 创建空列表,用于存储字典格式的数据
n = 0 # 创建计数变量
for i in f.readlines():
data = i.split(',') #将该行数据按','分离开
classify = data[0] # 提取分类
name = data[1] # 提取店铺名称
comment_count = fcm(data[2]) # 提取评论数量
star = data[3] # 提取星级
price = fpr(data[4]) # 提取人均
add = data[5] # 提取地址
qua = fcl(data[6])[0] # 提取质量评分
env = fcl(data[6])[1] # 提取环境评分
ser = fcl(data[6])[2] # 提取服务评分
if '缺失数据' not in [comment_count, price, qua]: # 用于判断是否有数据缺失
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条数据' %n)
else:
continue
print(datalst)
print('总共加载%i条数据' %n)
#数据存储.pkl数据
import pickle
pic = open('E:\\自我管理\\数据分析\\数据分析python\\课件\\CLASSDATA_ch02基础语言入门:从零开始学习Python\\data.pkl','wb')
pickle.dump(datalst,pic)
pic.close()
print('finished!')
#读取pickle
pic = open( 'E:\\自我管理\\数据分析\\数据分析python\\课件\\CLASSDATA_ch02基础语言入门:从零开始学习Python\\data.pkl', 'rb')
st = pickle.load(pic)
print(st)
pic.close()
项目02
# 题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的两位数?都是多少?
# 该题目不用创建函数
lst = [1,2,3,4]
m = []
n = 0
for i in range(len(lst)):
for j in range(len(lst)):
if j != i: #无重复数字
n += 1
m.append(str(lst[i])+str(lst[j]))
else:
continue
print('能组成%i个互不相同且无重复数字的两位数,\n分别是:'%n)
for i in range(len(m)):
print(m[i])
# 题目2:输入三个整数x,y,z,请把这三个数由小到大输出,可调用input()。(需要加判断:判断输入数据是否为数字)
# 提示:判断是否为数字:.isdigit()
# 该题目需要创建函数
def f():
lst = []
for i in range(1,4):
m = input('请输入第%i个数字:'%i)
while m.isdigit() == False:
m = input('输入为非数字字符,请重新输入第%i个数字:'%i)
else:
lst.append(int(m))
lst.sort()
print('输入的三个数字由小到大排列是:',lst)
f()
# 题目3:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
# 提示:利用while语句,条件为输入的字符不为'\n'.
# 该题目不需要创建函数
strs= list(input('请输入任意字符:')) #输入字符串
count = len(strs)
int_count = 0 #数字字符个数
str_count = 0 #英文字母个数
space_count = 0 #空格个数
other_count = 0 #其他字符个数
for i in range(count):
count = len(strs)
while strs[i] == '\\':
if strs[i+1] == 'n':
strs = list(input('输入字符有"\\n",不能继续进行,请重新输入!!'))
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,'字符总数为:%d'%count)
print ('该字符串中的字符有:%d '%str_count)
print ('该字符串中的数字有:%d' %int_count)
print ('该字符串中的空格有:%d '%space_count)
print ('该字符串中的特殊字符有:%d' %other_count)
# 题目4:猴子吃桃问题
# 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
# 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
# 提示:采取逆向思维的方法,从后往前推断。
# 该题目不需要创建函数
#思路为:第10天还没吃之前的桃子数量初始化 p = 1,之后从9至1循环9次,
#根据上述公式反推为 p = (p+1) * 2 可得第1天还没吃之前的桃子数量。
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:猜数字问题,要求如下:
# ① 随机生成一个整数
# ② 猜一个数字并输入
# ③ 判断是大是小,直到猜正确
# ④ 判断时间
# 提示:需要用time模块、random模块
# 该题目不需要创建函数
import time
import random
while True: #循环执行游戏询问
play_or_not = input('是否要进行游戏:是 or 否?')
while play_or_not == '是':
print('\n******游戏开始******\n')
c = time.time()
a = int(input('请输入猜数范围的下界(整数):'))
b = int(input('请输入猜数范围的上界(整数):'))
num = random.randint(a,b)
x = int(input('请输入范围为[%i,%i]的一个整数:'%(a,b)))
while x != num:
if x > num:
b = x
x = int(input('大了,请重新输入[%i,%i]的整数:'%(a,x)))
else :
a = x
x = int(input('小了,请重新输入[%i,%i]的整数:'%(x,b)))
else:
print('恭喜你,猜对了!!')
b = time.time()
usedtime = b-c
print('总用时为:%.2f s'%usedtime)
break
else:
break
语言的魅力真的是无穷无尽的,你可以用你的想法去完善和拓展一个点,相似又不同,有时看似只是加了一句简单的话语,但是其实已经完全改变了程序的功能,这也许就是越进行,越是乐在其中吧。