文章目录

  • 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中的使用

python程序的发明专利 python程序申请软件著作权_编程语言

python程序的发明专利 python程序申请软件著作权_git_02

python程序的发明专利 python程序申请软件著作权_软件测试_03

❓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

python程序的发明专利 python程序申请软件著作权_python程序的发明专利_04

python程序的发明专利 python程序申请软件著作权_软件测试_05

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 – 勾选所有选项
  1. git init:将当前目录变成git版本控制的目录–生成 .git 文件
  • 右击要上传的文件–点击Open in Terminal,输入git init
  1. ls -al:windows命令 dir/a -显示所有
  • dir/a:h 仅显示隐藏的 .git文件
  1. 点击右上方的绿色对勾(提交代码到本地仓库)
  • 对勾意思是将版本添加到git的版本管理库中 -若没有重新启动pycharm
  • 相当于git add 和 git commit --将代码添加到本地仓库
  • 在进入后的界面中将不需要的文件添加到版本控制文件
  • 右键 – Add to .gitignore – Add to .gitignore
  • 勾选右边的 Reformat code
  1. 点击下方commit,将代码上传到本地仓库 如何将本地代码和 github 代码进行关联?
  2. 在github网站创建仓库
  3. 将本地代码与远程代码进行关联
  • 点击 VCS – Git – Remotes – 添加想要关联的远程仓库的地址 https://github.com/Chan0619/test.git
  • 相当于 git remote
  1. 将本地代码push到远程仓库
  • VCS – Git – Push – 点击 push 提交
  • 相当于 git push

python程序的发明专利 python程序申请软件著作权_python程序的发明专利_06


右侧展示需要上传的代码

python程序的发明专利 python程序申请软件著作权_python_07


  • 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需要两种免密方式
  1. 在Pycharm里面配置好 github的用户名和密码
  2. 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属性通过参数传入,同时有两个方法:
  1. fill_charge(vol)用来充电,vol为电量
  2. 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('我输了')

面向对象之回合制游戏

  1. 使用面向对象的实现一个回合制格斗游戏
  2. 使用面向对象的继承改造游戏

代码优化 --继承

  • 后裔,后裔继承了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
  • 使用缩进表示层级关系
  • 支持流式语法表示对象

混合使用

  1. list嵌套dict
  2. dict嵌套list

Yaml 实战

Yaml实战案例

  1. 电动车案例
  2. 使用yaml配置电动车信息
  3. 配置两台电动车的信息,设置默认运行的电动车

课后作业

1、自己写一个面向对象的例子: 比如创建一个类(Animal)【动物类】,类里有属性(名称,颜色,年龄,性别),类方法(会叫,会跑) 创建子类【猫】,继承【动物类】, 复写父类的__init__方法,继承父类的属性, 添加一个新的属性,毛发=短毛, 添加一个新的方法, 会捉老鼠, 复写父类的‘【会叫】的方法,改成【喵喵叫】

创建子类【狗】,继承【动物类】, 复写父类的__init__方法,继承父类的属性, 添加一个新的属性,毛发=长毛, 添加一个新的方法, 会看家, 复写父类的【会叫】的方法,改成【汪汪叫】

调用__name__==’__main__’: 创建一个猫猫实例 调用捉老鼠的方法 打印【猫猫的姓名,颜色,年龄,性别,毛发,捉到了老鼠】。

创建一个狗狗实例 调用【会看家】的方法 打印【狗狗的姓名,颜色,年龄,性别,毛发】。

2、将数据配置到yaml文件里