1、开始
1.1 在Linux中使用python
1、python是脚本语言,且可跨平台,shell是能在Linux中用
2、用于 科学计算,自动化运维,云计算服务(前端),网络爬虫,数据分析,AI前端
当作字典,主要是第三方库
3、在Linux中使用Python
ubuntu 20.04已支持 python3 ,不用再安装。老版本apt-install也可以安装的
命令端方式(不会创建文件,直接每行返回结果):
程序文件方式:
vim a.py //创建python程序
运行程序
python3 a.py //运行Python程序
1.2 安装VScode并使用
原因:vim+cscope 跟踪源码厉害,但编辑不方便
VScode优势: 界面简介漂亮,跨平台(window linux),跨语言(c c++ python js java…),插件丰富,自动提示,按照可扩展成IDE调试
下载完复制进虚拟机
sudo dpkg -i code_1.59.1-1629375198_amd64.deb //用离线包 安装vscode
//卸载 dpkg -r code_1.59.1-1629375198_amd64.deb
将python3解释器 与 vscode 关联起来:
1、配置解释器: 点最下面的状态栏 的 python 3.10.6 -> 选默认的
2、运行和调试: 点 运行和调试 -> 创建lanuch.json (运行和调试的配置文件,类似于解释器(翻译)关联了,所以运行直接就可以跑) -> 选Python Debugger -> Python文件
3、断点调试: 在某行代码 行数字的前面 点击 设置断点(红点变亮) 点绿三角运行(或F5)(可以查看变量) -> 可单步调试(F11) 单步跳出是指 有函数不会跳进去
4、把对应目录的.vscode 文件拷到新的文件夹中,无需花时间再配置(文件夹拷贝要递归的拷贝,加-rf: $ cp ../VScodeFiles/.vscode/ . -rf
)
要看到.vscode隐藏文件需要加 -a ls -a
1.3 VScode下实用操作
1、输出时不显示多余信息(即解释器+文件位置),放到外部窗口去显示:更改launch.json里的console配置为 “console”: “externalTerminal” 按F5键,解释运行就会弹窗口(一闪而过)
2、ctrl + = //放大字体
ctrl + - //缩小字体
F5 //运行程序
3、避免终端运行后退出:用鼠标选中里面内容,鼠标不松开它不会退出
终端长时间停留 在代码末尾加(导入功能块,停3秒)
import time
time.sleep(3)
4、终端字体大小永久设置:终端右键 -> 首选项 -> 点 + -> 输入新配置名 -> 勾选 自定义字体 -> 调节大小 点选新配置的小三角,下拉菜单 选设为默认
1.4 初识
python代码 都是逐行 解析的,每一行的 print() 换下一行输出
from time import sleep,ctime #导入第三方的库函数
fire='大火' #变量赋值
def do_xcr(): #定义函数(完成做一件事)
print("准备食材")
print("-----开始炒菜------")
pot = "油"
pot = pot+ 'pork'
print('锅里有:'+pot)
if(fire == '大火'): #分支判断
count=0
while(count<10): #循环控制
count = count+1
print('翻炒'+str(count))
else:
print('翻炒40下')
pot = pot+ '辣椒'+'盐'+'花椒'
print('锅里有:'+pot)
sleep(2) #调用第三方的函数
print("装盘完成")
print(ctime()) #显示当前的时间
print("============做小炒肉=============")
do_xcr() #调用函数
print("============做小炒肉=============")
do_xcr() #调用函数(避免代码重复)
运行结果:
2、数值转换
2.1 八进制,十进制,十六进制
2.1.1 0o表示8进制
# 0o表示8进制
from decimal import * #decimal意思为十进制,这个模块提供了十进制浮点运算支持
a = 0o101
print("a="+str(a))
print("\n\n")
运行结果:a=65
str() 出来都是十进制的字符形式 因为 ‘0’ == 0
print("a="+str(65))
运行结果也是 a=65
2.1.2 10进制
# 10进制
b = 64
print('b='+str(b))
c = -237
print('c='+str(c))
print("\n\n")
运行结果
b=64
c=-237
2.1.3 0x表示16进制
# 0x表示16进制
d = 0x80
print('d='+str(d))
e = -0x92
print('e='+str(e))
print("\n\n")
运行结果
d=128
e=-146
2.2 长整形(** 代表次方)
不需要写类型,直接赋值
longint = 10000 ** 8 # 8次方
print("longint="+str(longint))
print("\n\n")
2.3 bool 类型
print(bool(1))
print(bool(True))
print(bool(''))
print(bool("123"))
print(bool([]))
print(bool([2,3,5]))
print(bool(()))
print(bool((2,3,5)))
print("\n\n")
运行结果
True
True(True,1自然是true)
False
True
False
True
False
True(无论是元组,字符串,还是列表,只要不空就是true,空就是false)
# 使用bool数
foo = 42
bar = foo < 42
print(bar)
print(bar+10) #false == 0
print('%s' % bar)
print('%d' % bar) #%f
print("\n\n")
false == 0
2.4 双精度浮点的几种形式
print(-5.555567119)
print(-5555567119e-9)
print(96000.)
print(96e3 * 1.0)
print(-1.609e-19)
运行结果
-5.555567119
-5.555567119
96000.0
96000.0
-1.609e-19
2.5 复数的几种形式
print(complex(2, 4))
print(1.23e-045+6.7e+089j)
运行结果
(2+4j)
(1.23e-45+6.7e+89j)
2.6 十进制浮点
dec = Decimal('.1')
print(dec)
print(Decimal(.1))
print(dec + Decimal(.1))
注意参数 ‘.1’ 和 .1 的区别
运行结果:
0.1
0.1000000000000000055511151231257827021181583404541015625
0.2000000000000000055511151231
也说明了十进制浮点并不是精确的,有的时候判断是不是要用作差小于一个很小值
2.7 格式转换
print(int(4.9999999))
print(float(4))
print(complex(4))
运行结果
4
4.0
(4+0j)
int() 永远是舍出,9再多也没用
2.8 进制转换
print(hex(255)) # 10进制转16进制
print(oct(255)) # 10进制转8进制
print(oct(0x111)) # 16进制转8进制
运行结果
0xff
0o377
0o421
2.9 ASCII转换
print("ASCII转换....")
print(chr(76)) # 数字转字符
print(ord('L')) # 字符转数字
运行结果
L
76
3、数据运算
3.1 算术
%取模(求余) **幂 //取整除
print(6+3*5/2);
#浮点型精度问题(因二进制,0.333表示有问题)运算中有0.3出现都会有问题
print(0.3-0.2); #输出0.099
print(0.1+0.2==0.3); #输出 false
#解决方法:放大后再缩小
print((10*0.1+10*0.2)/10==0.3); #输出 true
#% 取模(求余)
print(3%2); #单双数判断
print(2**3); #//2的3次方(幂)
print(9//2); #//取整除 为4
3.2 比较
除了比较值,还比较类型,2.0和2是一类的
a=2
b='2'
if(a==b):
print('值相等')
else:
print('值或类型不相等')
a=2
b=2.0
if(a==b):
print('值相等')
else:
print('值或类型不相等')
3.3 位运算
&与 |或 ~非 ^异或 <<左移 >>右移
a=60 #//对应二进制00111100
b=13 #//对应二进制00001101
print(a&b) # 00001100
print(a|b) # 00111101
print(a^b) # 00110001
print(~a) # 11000011
c=4 # 00000100
print(c<<1) # 00001000 左移乘2
print(c>>1) # 00000010 右移除2
3.4 逻辑运算
and与 or或 not非 in not/in is/is not if/if not
age =25
print('是青年吗 ',(age>18 and age<30))
hasHouse,money =True,1000
#hasHouse,money =False,1000
if(hasHouse or money>1000000):
print("有房或有1000万")
if not(hasHouse or money>1000000):
print("即没房也没1000万")
list = [1,2,3,4,8]
print('3在list中吗',3 in list)
print('6不在list中吗',6 not in list)
lili = {'name':'lili','age':30}
x = lili
x['name']='linda'
print(x,'是lili这个字典吗',x is lili) # 跟name里面的lili没关系
运行结果:
4、类型转换
Python是强类型的
# int() 转换为整型数字
print(int(3.14)+2)
print(int('12')+5)
print(int(0xa)+3)
# 转float
print(float(3)+1.24)
# str() 转换为字符串
print(str('12')+'5')
lili = {'name':'lili','age':30}
print(str(lili)+'good')
#print(lili+'good') #fail
# 隐式转换(自动转换)
name = 'ivan'
print(name[1]); # 字符串转换为列表 --> 查找某位置的字符,但是不能修改name[1]的值:name[1] = 'a'
print( '7'+'people') # 数字转换为字符串 --> 进行拼接
print( '7'-'people') # 报错:隐式转换失败 str和str不支持-操作
运行结果: