自学python
跟着《100天从新手到大师》开始自学python,感谢老师和各位大佬的无偿奉献,希望可以在上班前学会!
第一天
- 在官网下载最新的python编译器,安装然后hello,world
- 下载pycharm,社区版就行,调整一下老年人字体,护眼模式
- 整一个typora学学markdown,但实际上就当word用,符号根本不会
- 听从老师的建议,写完发个博客,纯粹记录一下,多个体验
课程内容
python的历史
原来官网下载的只是一个编译器,之前上班摸鱼直接在终端写,也是真的极简
python的优缺点
高级语言,上手简单,跨平台能力强,开源,但是速度慢
科普了一下机械语言,梦回单片机课程,我就是人肉编译器,全部给你搞砸掉!
python的应用
web前端、爬虫、数据分析、机器学习、自动化、量化交易
就想像小红书上的博主一样搞一个自动化之类的东西方便一下生活,或者爬虫一下游戏资料
第一个python程序
先学了下按住shift再右键可以选择在那个路径打开终端,终端里面输入python回车,就是交互式环境了,写一句就给你一个回应,有来有往就是交互式环境
- 第一个作业——翻译import this
我自己的蹩脚翻译,看了些好的翻译修正了一下意思,就图一乐:
格式要好看
直白好过晦涩
正楷好过草书
草书好过隶书(他这里complex更偏向复合,complicated才是复杂,只能通过比喻来讲才能好一点?)
扁平好过嵌套
稀疏好过稠密(多写几行代码来处理一个事情好过一行直接搞定)
代码可读性很重要
没有特例,原则不可打破
哪怕实用性高于纯粹主义
不要忽略错误
除非你故意为之
条条大路通罗马的时候,走一条道
就应该只走那一条道
哪怕一开始想不到最近的那条道,除非你是修路的人才知道
现在做总比不做要好
不做通常比瞎做要好
如果这个法子外人很难懂,那就不是个好法子
如果这个法子外人都能搞懂,有可能是个好法子
命名空间可太棒啦,多来点多来点
更好的交互式环境——IPYTHON
pip config set global.index-url https://pypi.doubanio.com/simple
pip install ipython
quit就可以退出了
这里我的pip版本有点低了,给了个warning,居然连升级的代码都给出来了,直接粘贴复制哈哈,不过不升级也已经安装好了
WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.
You should consider upgrading via the 'E:\python310\python.exe -m pip install --upgrade pip' command.
然后听到老师说不要更新,芜湖,总之出了问题在百度解决吧
用文本编辑器写代码——VSCODE
记事本也行,写完保存为所有文件,编码为UTF-8,起名为.PY文件
python 把文件拖过来就是绝对路径
第一天就是不停装东西,疯狂压缩游戏空间哈哈
现在最新是1.68,知乎有大佬教了快速下载的方法,但是没搞懂怎么弄,评论里下了1.62的版本,然后是安装,不过现在1.62的版本是会自动跟你说安装简体中文并重启,爽!
没试着能不能跑python,先放一个教程,不行就来搞
工程化开发——PYCHARM
每个文件都会有一个专属的虚拟环境,选个路径之后啥都别动,创建新项目,耐心等待文件复制
开始写代码啦
print函数
print()函数自带换行,加end=‘’,就不换行啦
print('hello,world', end='')
print('你好,世界')
print('hello,world')
print('你好,世界')
结果就是
hello,world你好,世界
hello,world
你好,世界
小技巧:
print('-' * 50)
结果是50个-,可以当分隔线用
--------------------------------------------------
注释
#代表注释,只能写一行
ctrl+/,选中的地方全部都加#成为注释,再按一下就取消注释
“”“和”""也是注释,可以写多行
设置开头注释模板:
运算符号
赋值运算符
以下图片皆来自菜鸟教程
算术运算符
取模主要是用来判断奇偶性的,要记住啊我
关系运算符
逻辑运算符
布尔值之间的运算,优先级低于算数运算和关系运算
and和or称为短路运算符,因为其特性,第一个条件成立后面就不算了
- 第二个作业——判断一个年份是不是闰年
四年一闰,百年不闰,四百年又闰
year = int(input('please input a year: '))
flag1 = year % 4 == 0
flag2 = year % 100 != 0
flag3 = year % 400 == 0
flag11 = flag1 and flag2
flag12 = flag11 or flag3
print(flag12)
练手题目嘛,可以写的再简洁点
year = int(input('请输入年份:'))
# x = year % 4 == 0
# y = year % 100 != 0
# z = year % 400 == 0
# print(x and y or z)
print(year %4 == 0 and year %100 != 0 or year %400 == 0)
- 第三个作业——输入三条边的长度,判断能否构成三角形
任意两边之和大于第三边
side1 = int(input('please input the first side:'))
side2 = int(input('please input the second side:'))
side3 = int(input('please input the third side:'))
flag1 = side1 + side2 > side3
flag2 = side1 + side3 > side2
flag3 = side2 + side3 > side1
flag11 = flag1 and flag2
flag12 = flag11 and flag3
print(flag12)
同样也是写的冗余了
a = float(input('a ='))
b = float(input('b ='))
c = float(input('c ='))
print(a + b > c and b + c > a and a + c > b)
格式化输出
%代表占位符,f代表浮点数,可以用变量替换
保留小数点位数:%.2f保留两位小数
a1=float(input('a1= '))
b2=float(input('b2= '))
print('%f + %f = %f' %(a1,b2,a1+b2))
print('%f - %f = %f' %(a1,b2,a1-b2))
print('%f * %f = %f' %(a1,b2,a1*b2))
print('%f / %f = %f' %(a1,b2,a1/b2))
print('%f // %f = %f' %(a1,b2,a1//b2))
print('%f %% %f = %f' %(a1,b2,a1%b2))
#这里的第一个%是占位符,表示转义,所以需要两个%%
print('%f ** %f = %f' %(a1,b2,a1**b2))
结果是
a1= 123
b2= 45
123.000000 + 45.000000 = 168.000000
123.000000 - 45.000000 = 78.000000
123.000000 * 45.000000 = 5535.000000
123.000000 / 45.000000 = 2.733333
123.000000 // 45.000000 = 2.000000
123.000000 % 45.000000 = 33.000000
123.000000 ** 45.000000 = 11110408185131957010659080963921001637101840276079092263812695592440203675146350059871151325184.000000
这里我的格式不规范,因为手打空格觉得麻烦,所以有一个简便方法来啦
CODE菜单,reformat code,一键解决空格问题,还你漂亮排版
另一种格式化输入的方式(python3.6之后加入的)
f表示format,{}就是占位符,也可以控制小数点位数’:.nf’
print(f'{a1} + {b2} = {a1 +b2}')
print(f'{a1} + {b2} = {a1 +b2:.2f}')
结果是
a1= 123
b2= 45
123.0 + 45.0 = 168.0
a1= 123
b2= 45
123.0 + 45.0 = 168.00
定义变量——数据的载体
- python是动态的,你给值,他自动声明类型~~(太棒了,学C的时候有点死亡)~~
- 变量使用字母(Unicode字符)、数字(不能开头)、下划线,不能使用特殊字符
- 区分大小写
- 不能使用python中的关键字(有特殊含义的单词:if等)和保留字(已有函数名)
- 建议遵守:见名知意(很重要,因为你取完名字就忘记他是啥了),全小写命名,多个单词用下划线连接(snake case)
- 双击变量,右键,refactor,rename,一键全部改名
整数运算
input()函数输入,给个提示方便用户,输入的一律认为是字符
用int()转化成整数类型,并且只能输入整数,其他的都不认,直接报错~~(我就是不会,摆烂给你看)~~
int(input('a1 = '))
数据类型
type()函数可以知道变量的数据类型
print(a,type(a))
ctrl+D 复制代码,注意这里是光标放在要复制的一行,就可以直接复制并且换行,如果你跟我一样傻傻的用光标划拉了再复制,就是没有换行的呜呜呜呜
ctrl+Y删除代码
布尔值(bool)只有True和False,表示真和假
d = 2 > 1
print(d,type(d))
结果是
True <class 'bool'>
复数类型(complex)极少用到
e = 3+5j
print(e,type(e))
结果是
(3+5j) <class 'complex'>
想到了计算电流的相位还是什么东西,开始痛苦
浮点数的科学计数法
f=123e-5
print(f)
g=12.3e-5
print(g)
结果是
0.00123
0.000123
浮点数表示法的问题
print(0.1+0.2+0.3)
print(0.3+0.2+0.1)
结果是
0.6000000000000001
0.6
解决办法就是,全部用整数运算,最后的结果用浮点数输出(银行算钱特别注意啦)
进制
十进制——110(decimal)
八进制——0o110(octal)
十六进制——0x110(hexadecimal)
二进制——0b110(binary)
进制转换,痛苦单片机
bin()十进制转二进制
oct()十进制转八进制
科学计数法
f=123e-5
print(f)
g=12.3e-5
print(g)
结果是
0.00123
0.000123
浮点数表示法的问题
print(0.1+0.2+0.3)
print(0.3+0.2+0.1)
结果是
0.6000000000000001
0.6
解决办法就是,全部用整数运算,最后的结果用浮点数输出(银行算钱特别注意啦)
进制
十进制——110(decimal)
八进制——0o110(octal)
十六进制——0x110(hexadecimal)
二进制——0b110(binary)
进制转换,痛苦单片机
bin()十进制转二进制
oct()十进制转八进制
hex()十进制转十六进制