文章目录
- 1. python 脚本编写实战1
- 环境问题
- 项目结构
- Git 与 GitHub
- Python基础语法实战
- 2. python 脚本编写实战2
- 理解面向对象
- 面向对象实战
- Yaml 用法
- Yaml 实战
1. python 脚本编写实战1
彩云小译
环境问题
- 建议以及经验
Python环境准备
查看Python安装路径:where python
- 官网:www.python.org
- Python和PyCharm环境安装配置:https://ceshiren.com/t/topic/57/3
- 学习链接:https://docs.python.org/zh-cn/3
Pycharm 环境准备
- https://www.jetbrains.com/pycharm/download/#section=windows
- python虚拟环境
- pip源切换
- 豆瓣:https://pypi.doubanio.com/simple
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple/
- 阿里云:mirrors.aliyun.com/pypi/simple/ 网易开源镜像站:http://mirrors.163.com/
项目结构
- $sourcecode/ 存放项目的所有源代码
- README 项目说明文件
- .gitignore 版本控制文件
- docs/ 存放一些文档
- requirements.txt 存放软件依赖的外部Python包列表
- bin/ 存放项目的一些可执行文件,当然可以起名script/之类的也行。
- setup.py 安装、部署、打包的脚本
- tests/ 测试代码
- extras/ 扩展,不属于项目必须的部分
- INSTALL 安装说明文档
- LICENSE 版权声明
- AUTHORS 作者列表
- MAKEFILE 编译脚本
Git 与 GitHub
- 安装git:git-scm.com/download
- git 是代码的管理工具,git可以回滚之前的代码
- mac安装:brew install git
- git --version 查看版本号
- 注册github:https://github.com
- Pycharm git 插件
git在Pycharm中的使用
❓Git SSH 配置 <与下面重复>
- 参考:https://ceshiren.com/t/topic/7405
- git config --global user.name “github用户名”
- git config --global user.email “github邮箱地址”
- ssh-keygen -t rsa -C “github邮箱地址”
- .ssh/id_rsa.pub 复制内容到github里面
- 验证:ssh -T git@github.com
github 创建代码仓库
echo “# FIS03” >> README.md git init git add README.md git commit -m “first commit” git branch -M main git remote add origin https://github.com/Chan0619/FIS03 git push -u origin main
pycharm与github交互–上传项目到github步骤
pycharm需要安装插件 markdown、git、github
首先配置 Pycharm 里github的账号与密码
- 先安装插件github:File – Settings – Plugins
- File – Settings – Version Control – GitHub – 输入账号密码
- 不能使用账号密码时,可以使用Use Token登录
- 在github点击右上角 Settings – Developer settings – Personal access tokens – Generate new token – 勾选所有选项
- git init:将当前目录变成git版本控制的目录–生成 .git 文件
- 右击要上传的文件–点击Open in Terminal,输入git init
- ls -al:windows命令 dir/a -显示所有
- dir/a:h 仅显示隐藏的 .git文件
- 点击右上方的绿色对勾(提交代码到本地仓库)
- 对勾意思是将版本添加到git的版本管理库中 -若没有重新启动pycharm
- 相当于git add 和 git commit --将代码添加到本地仓库
- 在进入后的界面中将不需要的文件添加到版本控制文件
- 右键 – Add to .gitignore – Add to .gitignore
- 勾选右边的 Reformat code
- 点击下方commit,将代码上传到本地仓库 如何将本地代码和 github 代码进行关联?
- 在github网站创建仓库
- 将本地代码与远程代码进行关联
- 点击 VCS – Git – Remotes – 添加想要关联的远程仓库的地址 https://github.com/Chan0619/test.git
- 相当于 git remote
- 将本地代码push到远程仓库
- VCS – Git – Push – 点击 push 提交
- 相当于 git push
右侧展示需要上传的代码
- github密码配置方法
- ~/.ssh下面有id_rsa -私钥,id_rsa.pub -公钥,将公钥放在github上
- cat ~/.ssh/id_rsa.pub 复制内容
- 在github网站点击Settings – SSH and GPG keys --New SSH key – 粘贴公钥
pycharm 安装git扩展插件
- git 提交代码到github需要两种免密方式
- 在Pycharm里面配置好 github的用户名和密码
- ssh key,将本地公钥配置到github上
Git SSH 配置
- 参考:https://ceshiren.com/t/topic/7405
- git config --global user.name “github用户名”
- git config --global user.email “github邮箱地址”
- ssh-keygen -t rsa -C “github邮箱地址”
- .ssh/id_rsa.pub 复制内容到github里面
- 验证:ssh -T git@github.com
我们强烈建议所有的git仓库都有一个README, LICENSE,.gitignore文件
简易的命令行入门教程:
Git 全局设置:
git config --global user.name "Chan"
git config --global user.email "phoebe.yanxi@gmail.com"
创建 git 仓库:
mkdir FIS03
cd FIS03
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/chan0619/FIS03.git
git push -u origin master
已有仓库?
cd existing_git_repo
git remote add origin https://gitee.com/chan0619/FIS03.git
git push -u origin master
Python基础语法实战
变量和函数
1、python 允许在模块里定义 变量和方法的 2、函数里是可以调用外部的变量 3、函数里不允许改变外部变量 4、把外部变量设置为global 全局的,就可以改变它 5、通过 id() 方法可以打印对象的内存地址 6、方法默认返回值 是None
__name__是Python的内置变量,用于指代当前模块。__name__:在执行当前模块时__name__等于__main__,在其他的模块中调用时__name__的值为模块名
#导入模块时会先解释执行模块里面的方法。 #放在if __name__ == '__main__':时就不会执行
if __name__ == '__main__': # 相当于模块的入口
# __name__是Python的内置的属性变量,name是一个变量,不是一个字符串。
# __main__是一个字符串
print(locals()) # locals() 查看本地有哪些全局变量
# 双下滑线开头的变量为私有变量
from import 与import 的区别:
- import 引用了变量的地址 --浅拷贝
- from import 相当于复制了一份变量到本地 --深拷贝
一般使用from import 比较多, 如果要改变里面的值则使用import
将当前的包 目录 设置为根目录,使其从当前目录开始导包: 右击当前目录名 – Mark Directory as – Sources Root
实战
- 发礼物练习
pycharm 常用的快捷键
- 格式化 alt + ctrl + L
- 导入 alt + 回车
- 复制当前行 ctrl +d
- 查看源代码 ctrl + 鼠标左键
- 注释,多行注释 ctrl + /
- 查找,替换 ctrl+f ,ctrl+r
课后作业
原有存款 1000元, 发工资之后存款变为2000元 定义模块 1、money.py saved_money = 1000 2、定义发工资模块 send_money,用来增加收入计算 3、定义工资查询模块 select_money,用来展示工资数额 4、定义一个start.py ,启动文件展示最终存款金额
# 浅拷贝
num2 = nums.copy()
# words1 是words的浅拷贝
words = ['hello', 'hogwarts', ['hurry', 'tom']]
words1 = words.copy()
words[0] = '哈啰'
print(words1)
print(words)
words[2][0] = '赫敏'
print(words)
print(words1)
# 浅拷贝,就是只拷贝第一层
# 深拷贝,完全拷贝出一个新的内容
words2 = copy.deepcopy(words)
words[0] = '哈啰'
words[2][0] = '赫敏'
print(words2)
print(words)
2. python 脚本编写实战2
理解面向对象
面向对象编程
- 一切皆对象 =属性+行为
- 类和实例的概念
- 类与继承
- Self 介绍
dir() 方法可以查看对象的属性和方法 l= [1,2,3] dir(l)
面向对象实例
- 房子
面向对象实战
- 创建一个Person 类
- 属性:姓名,性别,年龄,存款金额
- 方法:吃,睡,跑,赚钱
- 创建 FunnyMan类(喜剧演员)
- 继承父类Person的所有属性和方法
- 新增一个方法,fun()搞笑
类名:驼峰命名法 --每个单词首字母大写 文件名:小写 方法名:小写
类里面定义的方法都要加self self接受实例对象而不是类对象 不可以通过类直接调用方法 可以将方法变为类方法进行调用 @classmethod
类名().方法名 --通过实例化对象调用方法 类名.方法名 --通过类名调用方法
当实例化一个实例之后,就不受控制了
面向对象概念
- 类是虚拟的、抽象的概念,没有具体的实体
- 实例是具体到某个事物
- __init()__方法给实例的属性赋值
私有属性 与 私有方法 调用
- 私有的属性,不能通过对象直接访问,可以通过方法访问
- 私有的方法,不能通过对象直接访问
- 私有的属性、方法,不会被子类继承,也不能被访问
- 可以通过调用继承的父类的公有方法,间接的访问父类的私有方法、属性
- dir(实例) 查看可被调用的属性和方法
私有方法可以用_Person__money()访问 dir() 查看属性、方法
类的继承
- 被继承者:父类,又叫基类,超类
- 继承者:子类
- 可以继承父类的属性和方法
- 父类的私有属性、方法,不会被子类继承,也不能被访问
- 如果子类拥有父类一样的名字的方法,父类的方法将被覆盖(与参数无关)
继承 - 实战
- 父类:
- 人类
- 子类:
- 喜剧演员
- 人类所有的属性和方法
- 新增技能:搞笑
- 歌手:
- 人类所有的属性和方法
- 增强技能:赚钱
# 继承 name, age, gender, money为父类的属性
def __init__(self, skill, name, age, gender, money):
self.skill = skill
super().__init__(name, age, gender, money)
self 的意思
1、self 只在类中定义的方法才有,类外面的函数是不需要有self参数的 2、self的名字不是必须的, 也不是关键字 3、self 表示实例本身, 不是类 4、self的方法,需要实例去调用
self 表示实例本身,想要调用方法,需要传递实例,self表示类的实例
面向对象实战
实战1 - 面向对象之开电动车https://gitee.com/chan0619/HogwartsFIS03/blob/master/python_pratice/objectdemo/bicycle.py
- 写一个Bicycle(自行车)类,有run(骑行)方法,调用时显示骑行里程km(骑行里程为传入的数字)
- 再写一个电动自行成类EBicycle继承Bicycle,添加电池电量battery_level属性通过参数传入,同时有两个方法:
- fill_charge(vol)用来充电,vol为电量
- run(km)方法用于骑行,每骑行10km消耗电量1度,当电量耗尽时调用Bicycle的run方法骑行,
- 通过传入的骑行里程数,显示骑行结果(就是当电量耗尽,需要你真正骑的里程数)。
# 调用父类的方法
super().run(miles) # 用脚蹬的里程数,调用了父类的run方法
实战2 - 回合制格斗游戏
- 一个回合制游戏,每个角色都有hp和power,hp代表血量,power代表攻击力,hp的初始值为1000,power的初始值为200。
- 定义一个fight方法:
- my_hp = hp - enemy_power
- enemy_final_hp = enemy_hp - my_power
- 两个hp进行对比,血量剩余多的人获胜
# 三目表达式 --适用于简单的if else 表达式
print('我赢了') if my_final_hp > enemy_final_hp else print('我输了')
面向对象之回合制游戏
- 使用面向对象的实现一个回合制格斗游戏
- 使用面向对象的继承改造游戏
代码优化 --继承
- 后裔,后裔继承了Game的hp和power。并多了护甲属性。
- 重新定义另一个defense属性:
- final_hp = hp + defense - enemy_power
- enemy_final_hp = enemy_hp - power
- 两个hp进行对比,血量先为零的人输掉比赛
Yaml 用法
数据存储格式 excel, csv, json, xml, yaml…
yaml文件以 .yml 或 .yaml 结尾
https://www.runoob.com/w3cnote/yaml-intro.html引用 & 锚点和 * 别名,可以用来引用: & 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
数据类型
- YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
YAML --可以添加注释
- 安装 PyYAML
- 官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
- 简介:
- yaml:Yet Another Markup Language:另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,有点类似于json格式。
yaml.dump
- yaml.dump函数接受一个Python对象并生成一个YAML文档
yaml.load
- 函数yaml.load将YAML文档转换为Python对象
- 更推荐使用yaml.safe_load,更加安全
- 关键APIyaml.safe_load() 将yaml格式或者文件流转成 python 对象yaml.safe_dump() 将python 对象转成yaml格式
yaml语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
yaml支持的数据结构
- 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
- 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
键值对/字典
- yaml里面的键值对,也就是python里面的字典(dict)数据类型
- 使用冒号,冒号后面有空格。格式为:key:value
- 使用缩进表示层级关系
- 支持流式语法表示对象
混合使用
- list嵌套dict
- dict嵌套list
Yaml 实战
Yaml实战案例
- 电动车案例
- 使用yaml配置电动车信息
- 配置两台电动车的信息,设置默认运行的电动车
课后作业
1、自己写一个面向对象的例子: 比如创建一个类(Animal)【动物类】,类里有属性(名称,颜色,年龄,性别),类方法(会叫,会跑) 创建子类【猫】,继承【动物类】, 复写父类的__init__方法,继承父类的属性, 添加一个新的属性,毛发=短毛, 添加一个新的方法, 会捉老鼠, 复写父类的‘【会叫】的方法,改成【喵喵叫】
创建子类【狗】,继承【动物类】, 复写父类的__init__方法,继承父类的属性, 添加一个新的属性,毛发=长毛, 添加一个新的方法, 会看家, 复写父类的【会叫】的方法,改成【汪汪叫】
调用__name__==’__main__’: 创建一个猫猫实例 调用捉老鼠的方法 打印【猫猫的姓名,颜色,年龄,性别,毛发,捉到了老鼠】。
创建一个狗狗实例 调用【会看家】的方法 打印【狗狗的姓名,颜色,年龄,性别,毛发】。
2、将数据配置到yaml文件里