(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
import random
def rea\_pac(money,num):
ret = random.sample(range(1,money\*100),num-1)
print(ret)
ret.sort()
ret.insert(0,0)
ret.append(money\*100)
for i in range(len(ret)-1):
value = ret[i+1] - ret[i]
yield value/100
g = rea_pac(200,10)
for i in g:
print(i)
五、递归问路
lis = ['alex','wusir','yuanhao','linhaifeng','henry']
def inner(name):
if len(name) == 0:
return '没有找到路'
res = lis.pop(0)
if res == 'henry':
return '%s说:我知道老男孩就在沙河地铁站附近'%res
print('hi美男%s敢问路在何方'%res)
print('%s回答道,我也不知道,我帮你问问%s'%(res,lis))
f = inner(lis)
return f
print(inner(lis))
# 找到路后会把结果返回给上一个调用者'linhaifeng'
# 'linhaifeng'会把结果返回给上一个调用者'yuanhao'......
# 最终会把结果返回给最开始的调用者inner
六、人狗大战
import random
import time
# 定义一个人的类
class Person:
# 定义人的静态属性
def \_\_init\_\_(self,name,hp,ad,sex):
self.name = name
self.ad = ad
self.hp = hp
self.sex = sex
# 定义人的方法
def da(self,dog):
yy = random.randint(1,self.ad)
dog.hp -= yy
print('%s使用%s,打了%s,%s掉了%s点血'%(self.name,arms.name,dog.name,dog.name,yy))
if dog.hp < 50:
print("{}使用终极必杀技{}".format(dog.name,arms.skill()))
# 定义一个狗的类
class Dog:
# 定义狗的静态属性
def \_\_init\_\_(self,name,hp,ad,kind):
self.name = name
self.hp = hp
self.ad = ad
self.kind = kind
# 定义狗的方法
def yao(self,person):
uu = random.randint(1,self.ad)
person.hp -= uu
print('%s咬了%s,%s掉了%s点血' % (self.name, person.name, person.name,uu))
if person.hp < 50:
print("{}使用终极必杀技{}".format(person.name,arms.skill()))
# 定义一个武器类
class Arms:
def \_\_init\_\_(self,name,hp,ad):
self.name = name
self.hp = hp
self.ad = ad
# 定义一个武器的技能
def skill(self):
li = ['飞龙在天','乾坤大挪移','九阳神功']
f = random.choice(li)
return f
arms = Arms('铁锹',3000,2000)
henry = Person('henry',500,30,'男')
dog = Dog('大黄',300,30,'哈士奇')
c = 1
while dog.hp > 0:
print('第{}回合'.format(c))
dog.yao(henry)
henry.da(dog)
time.sleep(1)
c +=1
七、计算器
import re
express = '1-2\*((60-30+(9-2\*5/3+7/3\*99/4\*2998+10\*568/14)\*(-40/5))-(-4\*3)/(16-3\*2))'
express = express.replace(' ','')
# 计算
def cout(exp):
if '\*' in exp:
a,b = exp.split('\*')
return str(float(a) \* float(b))
else:
a, b = exp.split('/')
return str(float(a) / float(b))
# 表达式的符号管理把++变成+,--变成-,+-变成-,-+变成-
def format\_exp(exp):
exp = exp.replace('++','+')
exp = exp.replace('+-','-')
exp = exp.replace('--','+')
exp = exp.replace('-+','-')
return exp
# 计算所有的乘除法
def cal\_no(res):
while True:
chengshu = re.search('\d+\.?\d\*[\*/]-?\d+\.?\d\*', res) # (9-2\*5/3+7/3\*99/4\*2998+10\*568/14)
if chengshu:
ret = chengshu.group() # 2\*5
resut = cout(ret) # 得到乘除法的计算结果 10.0
# 将2\*5替换成10.0
res = res.replace(ret, resut) # (9-10.0/3+7/3\*99/4\*2998+10\*568/14)
else:break
print(res) # (9-3.3333333333333335+173134.50000000003+405.7142857142857)
# 表达式的符号管理把++变成+,--变成-,+-变成-,-+变成-
res1 = format_exp(res) # 将替换后的结果从新赋值给res
# 将括号内的加减法都匹配出来
res_lis = re.findall('[-+]?\d+(?:\.\d+)?',res1)
print(res_lis) # ['9', '-3.3333333333333335', '+173134.50000000003', '+405.7142857142857']
sum_n = 0
for i in res_lis:
sum_n += float(i)
return sum_n
def remove\_bracket(express):
while True:
# 提取表达式最里层的括号
exp = re.search('\([^()]+\)',express)
if exp:
res = exp.group() # (9-2\*5/3+7/3\*99/4\*2998+10\*568/14)
rep = cal_no(res) # 173545.88095238098
print(rep)
express = express.replace(res,str(rep)) # 因为rep的结果是一个数字
print(express) # 1-2\*((60-30+173545.88095238098\*(-40/5))-(-4\*3)/(16-3\*2))
else:break
return express # 括号内的表达式全部计算完成1-2\*-1388338.2476190478
ret = remove_bracket(express)
print(cal_no(re
八、校验文件的一致性
# import os
# import hashlib
# def file\_md5(path):
# filesize = os.path.getsize(path)
# md5 = hashlib.md5()
# with open(path,'rb') as f:
# while filesize >= 4096:
# content = f.read(4096)
# md5.update(content)
# filesize -= 4096
# else:
# content = f.read(filesize)
# if content:
# md5.update(content)
# return md5.hexdigest()
#
# def cmp\_file(path1,path2):
# return file\_md5(path1) == file\_md5(path2)
# path1 = r'D:\s20\day18\视频\4.面向对象整理.mp4'
# path2 = r'D:\s20\day18\视频\tmp.mp4'
# ret = cmp\_file(path1,path2)
# print(ret)
九、打印九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("%s\*%s=%s"%(i,j,i\*j),end=' ')
print()
for i in range(1,10):
for j in range(i,10):
print("%s\*%s=%s"%(i,j,i\*j),end=' ')
print()
十、购物车作业
# 创建一个名为‘购买账单的txt文件’
goods = []
money = input('请充值充值金额').strip()
with open('商品信息',encoding='utf-8')as f:
for i in f:
xinxi = i.strip().split(' ')
if xinxi[0] == 'name':
continue
else:
dic = dict([('name',xinxi[0]),('price',xinxi[1])])
goods.append(dic)
print(goods)
"""
页面显示 序号 + 商品名称 + 商品价格
"""
a = 1
for v in goods:
print(a,v['name'],v['price'])
a += 1
print('n 购物车结算')
print('q 或 Q 退出')
shop_dic = {}
sum = 0
a = 1
dic = {}
balance = 0
while 1:
shuru = input('请输入序号').strip()
if shuru.isdigit() and (0 < int(shuru) <= len(goods)):
print(goods[int(shuru)-1]['name'],goods[int(shuru)-1]['price'])
# 购物车添加商品名称和价格和数量
shop_dic.setdefault(goods[int(shuru)-1]['name'],{'price':goods[int(shuru)-1]['price'],'amount':0})
# 增加商品数量
shop_dic[goods[int(shuru)-1]['name']]['amount'] += 1
elif shuru == 'n':
for k,j in shop_dic.items():
# python学习交流群:489111204
# 展示购物车商品名称价格数量
print(a,k,j['price'],j['amount'])
# 带序号和商品名称的字典
dic[a] = k
a += 1
sum += int(j['price'])\*int(j['amount'])
if int(money) >= sum:
print('结算成功')
balance = int(money)-sum
for s, b in shop_dic.items():
print(s, b['price'], b['amount'])
print('共计消费{}元,剩余金额{}元'.format(sum, balance))
break
while int(money) < sum:
print('余额不足')
shanchu = input('请输入要删除的商品序号')
# 用户选择删除购物车里的商品则在购物车里将数量减一
shop_dic[dic[int(shanchu)]]['amount'] -= 1
sum = sum - int(shop_dic[dic[int(shanchu)]]['price'])
else:
print('结算成功')
balance = int(money) - sum
for s, b in shop_dic.items():
print(s, b['price'], b['amount'])
print('共计消费{}元,剩余金额{}元'.format(sum, balance))
break
elif shuru.upper() == 'Q':
print('程序退出')
break
else:
print('输入有误请重新输入')
with open('购买账单',encoding='utf-8',mode='w') as f1:
for s, b in shop_dic.items():
f1.write('商品名称:{} '.format(s))
f1.write('单价:{} '.format(b['price']))
f1.write('数量:{}\n'.format(str(b['amount'])))
f1.write('共计消费{}元\n'.format(sum))
f1.write('剩余金额%s元'%(balance))
十一、博客园登录
# 创建一个log和register文件,
import time
dic = {
1: '请登录',
2: '请注册',
3: '文章页面',
4: '日记页面',
5: '评论页面',
6: '收藏页面',
7: '退出程序',
}
def Home\_display():
"""
首页展示
:return:
"""
print('欢迎来到博客园首页!!!')
for i in dic:
print(i,dic[i])
Home_display()
def ster():
"""
用户注册函数,将用户名,密码写入文件
:return:
"""
user_name = input('请填写注册名称').strip()
pass_word = input('请填写注册密码').strip()
with open('register','a+',encoding='utf-8') as f1:
f1.write('{},{}'.format(user_name,pass_word)+'\n')
print('注册成功,请登录!!!')
def login\_system():
"""
登录函数
:return:
"""
user_name = []
time = 3
with open('register', 'r+', encoding='utf-8') as f:
for i in f:
user_name.append(i.strip())
while time >= 1:
name = input('请输入用户名')
wd = input('请输入密码')
l = name + ',' + wd
if l in user_name:
print('登录成功')
chioce(name)
else:
time -= 1
if time == 0:
print('登录次数超出限制,请您注册后登录!')
break
print('用户名或密码错误,剩余{}次机会'.format(time))
def eixt\_procedure():
"""
退出程序
:return:
"""
print('程序退出,欢迎下次光临')
exit()
def log(n,func):
with open('log','a+',encoding='utf-8') as f2:
current_time = time.strftime("%Y-%m-%d-%X",time.localtime())
f2.write('{}:{}调用了{}函数'.format(n,current_time,func) + '\n')
def diary(n):
"""
日记页面
:return:
"""
print('欢迎{}访问日记页面'.format(n))
log(n, 'diary')
def comment(n):
"""
评论页面
:return:
"""
print('欢迎{}访问评论页面'.format(n))
log(n, 'comment')
def Collection(n):
"""
收藏页面
:return:
"""
print('欢迎{}访问收藏页面'.format(n))
log(n, 'Collection')
def Article(n):
"""
文章页面
:return:
"""
print('欢迎{}访问文章页面'.format(n))
log(n, 'Article')
lis = [login_system,ster,Article,diary,comment,Collection,eixt_procedure,log]
def chioce(a):
"""
用户选择函数
:return:
"""
while 1:
number = input('请选择页面:').strip()
if number.isdigit() and 3 <= int(number) <= 6:
lis[int(number)-1](a)
# 不可以输入字母
elif number.isdigit() and (int(number) ==1 or int(number)==7):
if int(number)==7:
eixt_procedure()
lis[int(number) - 1]()
else:
print('请输入正确页面选项:')
def chioce1():
while 1:
number = input('请选择登录或注册或退出').strip()
if number.isdigit() and (1 == int(number) or int(number) == 7 or int(number) == 2) :
if int(number) == 7:
eixt_procedure()
else:
lis[int(number)-1]()
else:
print('输入有误请重新输入')
chioce1()
十二、学生选课系统
# 创建course\_file,test.log,vip\_admin 文件
import hashlib
import pickle
import os
import logging
logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png)
### 四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)
![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png)
### 四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
### 五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**