一、pycharm的使用和python基本语法
(一)、pycharm的使用和python环境
1、python以及pycharm的安装
python 的版本选择:3.x 版本,不要安装2.x 版本,有很多语法不一样
如何确定自己 python 版本: cmd: python
不是内部命令:python没有正确安装,原因大概率是因为没有配置环境变量(配置环境变量后重启电脑生效)
指定 python 的安装目录:一般来说是安装在 d:\python37
测试python是否安装成功
cmd: python
cmd: pip ,或者 pip3 , 有任何一个出现命令不存在,
额外注意:loadrunner 中也有pip,这个pip配置环境变量了之后,python中的pip也需要配置环境变量
prcharm 的版本选择:社区版够用
pycharm 只是一个工具,python 才是关键
2、pycharm 新建项目
新建项目
file ---> New Project
退出项目
file ---> Close Project
切换项目
file ---> Open
file ---> Open Recent
3、文件、目录、包的创建和管理
Project ---> 右键 ,可以新建文件、目录和包
4、pycharm 的基础使用
python 代码是保存到以 .py 结尾的文件当中
.py 文件又是放到各个文件夹(目录)下面的
5、如何运行代码:
右键,点击 run
命令行运行:点击底下的 Terminal
进入项目路径
python 拼接好的路径/python文件.py
6、安装第三方库
第三方库:是别人已经写好的 python 代码
第一种方法:
安装:pip install 库名
卸载:pip uninstall 库名
第二种方法:pycharm :不要勾选 user's site package
第三种方法:库放在国外的服务器上,需要用到国内安装源,python国内源
pip install 库名 -i 源地址
pip install openpyxl -ihttps://pypi.tuna.tsinghua.edu.cn/simple
python国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/ 豆瓣:http://pypi.douban.com/simple/
(二)、python基本语法
1、基本语法
print 输出
表示在屏幕上打印出(显示出)
使用的任何的代码,双引号是半角,英文
print 默认输出是换行的,不同的数据之间用逗号隔开
python注释: 表示在 python 当中不会运行的文字(不会当成代码), 是说明下面的代码是什么?
# 表示单行注释 , Ctrl + /
""" """ 表示多行注释
''' ''' 表示多行注释
缩进:
现在这个阶段,所有的代码全部顶格写,不要进行缩进。
数值
和数学中的数值表示是一样的(注意点:数值不用加引号)
字符串
python 使用引号来表示字符串(一串文字)
变量
什么是变量:是用来存储数据
a = 100
b = 200
c = “ hello world”
变量名的命名规范:
只能包含数字、字母、下划线,
不能以数字开头,
不能有关键字( 注意点 )
python 中所有的关键字: keyword.kwlist
尽量做到见名知意
尽量不要用拼音
标识符:(凡是我们自己取的名字,都是标识符。)
规范:标识符由字母、数字、下划线组成,不能使用关键字
标识符包括:变量名、函数名、类名、模块名、项目名
在python中,所有标识符可以包括英文,数字以及下划线(_),但不能以数字开头。
python 中的标识符是区分大小写的,大写的 A 和小写的 a 不一样
标识符的命名风格:
下划线命名法:
规范:单词字母小写,单词之间使用下划线连接
如:max_number ,test_data
大驼峰命名法:
规范:每个单词的第一个字母大写
如:MaxNumber , TestData
小驼峰命名法:
规范:第一个单词以小写字母开始,第二个单词的首字母大写
如:maxNumber , testData
input 用户输入
从控制台里面获取一个数据,获取到的类型是字符串类型
二、python中常见数据类型
(一)、数值类型 & 运算符
1、数值类型数据
数值类型
整数(int):整数
浮点数(float):小数
布尔值(bool):只有两个值 True 和 False
2、python 常见运算符
算术运算符:
/
除法运算一定要注意:除数不能为0
除数如果为0,就会报错:ZeroDivisionError: division by zero
//
整除
%
余数:模运算
```
# +print(5+6)# -print(7-8)# *print(2*3)# /# 只要是进行除法运算,得到的是一个 floatprint(4/3)print(4/2)# 除法运算一定要注意,除数不能为 0# 除数如果为0,就会报错:ZeroDivisionError: division by zero# 程序报错以后,就无法继续运行# print(2/0)# print('hello world')# // 得到的是一个整数。 整除print(4// 3)# % 取余数 : 模运算print(4%3)# ** 幂运算 4的3次方print(4**3)
```
赋值运算符
+=
-=
*=
/=
//=
%=
**=
```
name = 'yuze'age = 18#涨一岁age = age + 1print(age)#缩写 age += 1 ==> age = age + 1age += 2print(age)age /= 3print(age)
```
比较运算符: 比较运算得到的结果是一个 bool 值, True 或 False
<=
>=
!=
```
> 大于print(5 > 4)# True< 小于print(6 < 3)# False>= 大于等于print(6 >= 3)# True<= 小于等于print(6 <= 3)# False!= 不等于print(6 != 3)# TrueTODO: == 才是比较运算, 一个 = 是赋值运算print(6 == 6)
```
逻辑运算 : 可以使用()提高优先级
and
or
not
```
a =3>4print(a)b =4!=5print(b)# 运算 and# 每一个都为 Trueprint(aandb)# False# 运算 or# 只要有一个为 Trueprint(aorb)# True# 练习a =Trueb =5==4# Falsec =5!=3# Trueprint(aandborc)# Trueprint(aorbandc)# True# python 的运算有没有优先级,如何设置优先级# 使用 () 设置优先级print(((aandb)orc)andb)# not 取反print(not(b))# True
```
身份运算
is
is not
成员运算
in
not in
```
# inname ='yuz'print('u'inname)# Trueprint('uz'inname)# Trueprint('uai'inname)# False#TODO:in 一定是连着的, yz 是一个整体print('yz'inname)# Falseprint('Y'inname)# False
```
3、随机数模块: random (python 官方库)
随机生成 0-1 之间的浮点数:random.random()
随机生成 0-100 之间的浮点数:random.randint(1, 100)
```
importrandomf_num = random.random()print(f_num)num= random.randint(0,100)print(num)
```
(二)、字符串
本节问题:
问题一:python中如何表示字母,比如要将一个人的名字储存下来?
问题二:字符串如何定义?
问题三:字符串如果要换行怎么办?
问题四:数值类型的数据可以转换成字符串吗?
问题五:可以把两个字符串组成一个吗?
问题六;如何获取字符串中某个具体的字符?
1、字符串的定义:
单引号、双引号:定义单行字符串
三引号、三双引号: 多行字符串定义
空字符串: s=''
str():
注意点:字符串中有单引号时,外面用双引号注意区分
```
"""字符串的定义
如何表示字符串:
- 引号表示字符串
- 单引号 ''
- 双引号 ""
- 三引号 ''' '''
- 三双引号 """"""
"""name1 ="yuze"print(name1)name2 ='yuze'print(name2)name3 ='''yuze'''print(name3)name4 ="""yuze"""print(name4)print(name1 == name2 == name3 == name4)# Trueprint(name1 == name2)# Trueprint(name1 == name3)# Trueprint(name1 == name4)# True
```
2、字符串的切片和下标取值
1、下标索引取值
下标取值:可以正向取,也可以反向取
注意点:正向从 0 开始,反向从 -1 开始
```
name ='yuzwang'print(name[1])# uprint(name[0])# y# 获取第3个字符print(name[2])# z# 获取 gprint(name[6])print(name[-1])
```
2、切片: [:][::]
问题:下标取值只能获取单个元素,现有字符串 str1='hello python' ,如果要获取出来 python 应该怎么做?
切片的语法: 和下标取值一样使用中括号进行切片,有两种用法:
[a:b] :a代表起始位置下标, b 代表终止位置下标(左闭右开);
[a: b: c] : a代表起始位置下标, b 代表终止位置下标(左闭右开),c 代表步长。
```
"""字符串的切片 slice
获取多个字符
索引获取的公式:
m_str[start:end:step]
注意:end - start 的符号 必须和 step 的符号相同才可以获取到索引
step 的值不能为0
"""name ='yuzwang'# 要 1 和 2print(name[1:2])# uprint(name[0:1])# y#TODO:这个才是对的#TODO:顾头不顾腚,取头不取尾,取左不取右print(name[0:2])# yuprint(name[3:6])# wan# 什么是 step , 取完第一个索引,把索引 + 多少# step = 2print(name[3:6:2])# wnprint(name[1:5:3])# ua# step 可以为负数print(name[5:1:-3])# nzprint(name[5:1:3])# 取不到值 Noneprint(name[1:4:-2])# 取不到值 None#TODO:end - start 的符号 必须和 step 的符号相同才可以获取到索引#TODO:step 的值不能为0,否则会报错:ValueError: slice step cannot be zeroprint(name[1:5:0])#TODO:IndexErrorprint(name[1000000])# IndexError: string index out of rangeprint(name[1:1000000])# uzwang 不会报错,会取到所有值name ="yuzewang"# 省略 end ,表示取到最后print(name[1:])# 省略 start ,表示从 0 开始print(name[:5])# 复制,copy 从头到尾,#TODO:面试题:复制字符串print(name[:])name_copy = name[:]print(name_copy)# 倒序 '123456' ==> '654321'# TODO:面试题:倒序一个字符串print(name[::-1])# gnawezuy
```
3、字符串拼接和转义
+ 号:'hello' + 'python'
字符串转义:
\n: 换行符
\t: 水平制表符
关闭转义:r'hello \n python'
```
name ='yuz'family_name ='wang'print(name + family_name)print(name +' '+ family_name)字符串和数字能不能相加print('yuz'+ 7)# 字符串和数字不能直接相加,会报错:TypeError: must be str, not intprint('yuz'+ str(7))# yuz7数据类型的转化print(int(name))# 报错:ValueError: invalid literal for int() with base 10: 'yuz'print(int('12'))# 12print(bool(34))# Truebool 转化,只要是非0,非空的就是True字符串换行'\'不会分开成两行name ="yuze ooasfjojo"\"wefwllfjlj"print(name)# yuze ooasfjojowefwllfjlj# 三引号换行,得到多行数据name ="""yuze flaljlkfjlajl
lsajllakj fjk
sjljjfljladf
aljfl
"""print(name)# 单引号中 \n 表示换行name ='kaixina lajj\nlfljajljssfjdlk\njljajs'print(name)
```
4、字符串常用方法
join : 字符串拼接
``
name ="qin er cai"# 字符串拼接print(name +'wang')# 使用 join 拼接print(name.join(['a','b','c']))# aqin er caibqin er caic# 时间 ['2020', '08', '03'] 用 / 连接起来print('/'.join(['2020','08','03']))# 2020/08/03print('2020'+'/'+'08'+'/'+'03')# 2020/08/03
``
find : 查找元素的位置
```
# find:在字符串当中查找某个字符或者字符串的位置# 会得到索引a ="wangyuze is coming"print(a.find('e'))# 7index= a.find('e')print(index)# 7# 如果找的有两个呢? i,会得到第一个print(a.find('i'))# 9# 如果是一个子串呢? ngprint(a.find('ng'))# 2# 如果找不到怎么办?会得到 -1 ,这是规定print(a.find('isnot'))# -1# 如果子串不在一起,也是找不到,返回 -1print(a.find('wn'))# -1# index 约等于 find# 区别:index 找不到元素的时候,会报错,find 找不到的时候返回-1print(a.index('ng'))# 2print(a.index('wn'))# ValueError: substring not found
```
count : 查找元素的个数
```
# count 统计某个字符出现的次数m_str ='foweofpweef'print(m_str.count('o'))# 2song ="我爱你,我喜欢你,我..."print(song.count('我'))# 3
```
replace : 替换字符
```
# replace 替换song="我爱你,我喜欢你,我..."print(song.replace('你','ta'))# 我爱ta,我喜欢ta,我...
```
split : 字符串分割
```
#split切分、切割 ==》 和join相反 time_string ='2020/08/03'print(time_string.split('/')) # ['2020','08','03']
```
format : 格式化输出
upper : 将字母大写
```
# upper 所有字母都大写name='yuze'print(name.upper())# YUZE
```
lower : 将字母小写
```
# lower 所有字母都小写name='JECK'print(name.lower())# jeck
```
strip : 去掉两边的特殊字符,如果什么都不传,就是去掉空格或者换行符
```
# strip 去掉两边的特殊字符,如果什么都不传,就是去掉空格或者换行符name =' yuze wang 'print(name.strip())# yuze wangprint(name) cp ="&雨泽&哈哈&"print(cp.strip('&'))# 雨泽&哈哈
```
len : 计算字符串长度
```
# len 计算字符串的长度name='yuzewang 'print(len(name))# 9
```
5、字符串格式化输出
format 格式化输出
format() 功能强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用 {} 作为特殊字符代替 %
format 字符串的格式化
```
```# 现在需要打印下面的格式:-------------------借条借款人:yuz债权人:double king金额:500-------------------loan_name = 'yuz'rich_man = 'double king'money = 500# # 方法一:# print("---------------------")# print('借条')# print('借款人:' + loan_name)# print('债权人:' + rich_man)# print('金额:' + str(money))# print('---------------------')# # # 方法二:# {} 表示占坑符,占位符# 位置一定要匹配,不能乱填顺序# print("""# -------------------# 借条# 借款人:{}# 债权人:{}# 金额:{:.2f} 万# -------------------# """.format(loan_name, rich_man, money))# # # # 方法三:# # f-string : python3.6 以后才支持# print(f"""# -------------------# 借条# 借款人:{loan_name}# 债权人:{rich_man}# 金额:{money} 万# -------------------# """)
```
传统的格式化输出 %
(三)、列表和元组
1、列表
列表的定义
是一种数据类型,可以用来存储多个数据
列表用 [ ] 来标识
列表内部的元素可以是任意类型的
列表是使用最频繁的数据类型之一
列表的常见操作
下标取值(索引取值):获取某一个元素
切片操作:获取多个元素
有步长的切片过程:先根据起始位置和终止位置,将内容切出来,然后再根据步长分为若干部分,然后将每部分的第一个元素拿出来,得出结果。
修改元素的值:可以通过下标修改指定位置的元素。
```
# 5 个人,5个大佬 , 使用列表big_boss = ['Demons','Go','EE','上善若水','summer']print(big_boss)# 元素可以是任意的数据类型big_boss = ['Demons',11,True,33.33,'summer']print(big_boss)big_boss = ['Demons',11,True,33.33, ['a','b','c']]print(big_boss)big_boss = ['Demons',11,True,33.33, ['a','b',['yuz',True]]]print(big_boss)# 索引: 获取索引为 0 的元素print(big_boss[0])# Demonsprint(big_boss[-1])# ['a', 'b', ['yuz', True]]print(big_boss[-2])# 33.33print(big_boss[2])# True# 获取 aprint(big_boss[-1][0])# alast_one = big_boss[-1]print(last_one[0])# a# 获取 'yuz'print(big_boss[-1][-1][0])# yuz# 切片print(big_boss[:3])# ['Demons', 11, True]
```
列表嵌套
列表中如果有多层嵌套,取值时需要一层一层的取值
```
lst = [ 'a', 'b', [1,2,3]]print(lst[0]) # aprint(lst[-1][1]) # 2
```
列表的方法
增:append 、insert 、 extend
删:pop 、 remove
改:通过下标修改值
查:index 、 count
其他:reverse 、 sort
```
# TODO:坑dalaos = ['随风']new_dalao = dalaos.append('利己')print(dalaos) # ['随风','利己']#append() 返回 Noneprint(new_dalao) # None# 再添加多个,['一罐','本本','可爱','美雪'] 添加到最后dalaos.extend(['一罐','本本','可爱','美雪'])print(dalaos)# TODO: 坑2报错:AttributeError:'NoneType'objecthasnoattribute'append'new_dalao = dalaos.append('sfo').append('hello').append('sof')print(new_dalao)# 增加某个元素,修改的是原来的变量 lstlst = ['yuz','shanshan','rita']lst.append('裴纶')print(lst) # ['yuz','shanshan','rita','裴纶']#insert指定索引位置添加元素,不是获取索引,不用[]lst.insert(1,'仙人球')print(lst) # ['yuz','仙人球','shanshan','rita','裴纶']#extend添加多个,可以合并2个列表lst.extend(['tiger','f2'])print(lst) # ['yuz','仙人球','shanshan','rita','裴纶','tiger','f2']lst = [1,2,3]lst.append(3)print(f"第一次尝试{lst}") # 第一次尝试[1,2,3,3]# lst.extend(3)#print(f"第二次尝试{lst}") # 报错:TypeError:'int'objectisnot iterablelst.extend([3])print(f"第三次尝试{lst}") # 第三次尝试[1,2,3,3,3]a= [1,2,3]b= [4,5,6]#b是作为一个整体,一个元素,添加到a当中#a.append(b)#print(a) # [1,2,3, [4,5,6]]#b是拆开里面元素,作为多个元素,添加到a当中a.extend(b)print(a) # [1,2,3,4,5,6]
```
```
"""列表的删除-remove-delete-pop"""#remove: 在列表当中删除指定的值big_boss = ['糖','木易','均价']big_boss.remove('木易')print(big_boss) # ['糖','均价']#delete异类:尽量不要用# del big_boss[0]#print(big_boss) # ['均价']#pop0代表索引为0big_boss.pop(0)print(big_boss) # ['均价']# 获取索引为0的值print(big_boss[0])big_boss.append('木易')print(big_boss) # ['均价','木易']
```
```
"""列表的修改
lst[0] = 1
"""lst = [1,2,3]lst[1] ='a'print(lst)# [1, 'a', 3]lst[1],lst[2] ='c','d'print(lst)# [1, 'c', 'd']lst[1:] =5,6print(lst)# [1, 5, 6]
```
```
"""列表的方法
- index
- count
- sort
- reverse
- clear
"""lst = [4,5,6,5]# # 统计# print(lst.count(5)) # 2## # index 查找得到第一次出现的索引值# print(lst.index(5)) # 1## # sort 排序# print(lst.sort()) # None## lst.sort()# print(lst) # [4, 5, 5, 6]### # reverse 反向,倒序 , 相当于 [::-1]# lst.reverse()# print(lst) # [6, 5, 5, 4]# 反向排序lst.sort(reverse=True)print(lst)# [6, 5, 5, 4]# clera 清除一个列表lst.clear()print(lst)# []
```
2、元组
元组的定义:
元组定义在小括号中,元组内部的数据:它支持数字,字符串甚至可以包含元组(即嵌套)
元组的常见操作
下标取值:元组内部的数据是有序的,可以通过下标获取对应的元素
注意点
t = () 空元组
t = (1,) 只有一个数据的时候要注意加逗号
元组的值不可以修改,是属于不可变数据
元组的方法
count : 查找元素的个数
index :查找元素下标
```
tuple_yuz = ('yuz','一罐',['闲人','七七','小骄傲'])# 修改的是元组的元素,元组的元素是列表# tuple_yuz[2] = ['新列表']# print(tuple_yuz) # 不能修改元组的元素# 为什么这里可以改??# 元组的不可变是相对的,不是说里面所有的内容都完全不能变# 只要看索引的前面是不是一个可变的类型tuple_yuz[2][0] = ['新列表']print(tuple_yuz)tuple_yuz = ('yuz','一罐',{'tuple':'yuze'})# 索引前面是元组,代表我们要修改的是元组的元素,不可以# tuple_yuz[2] = 'hello world'# tuple_yuz[2] 是字典,可变类型,可以直接修改tuple_yuz[2]['name'] = 'hello world'print(tuple_yuz)# 索引前yuz是列表,可以改变yuz = ['yuz','一罐',('四叶草','晓峰')]yuz[2] = 'hello'print(yuz)# yuz[2]是元组,不可变yuz[2][1] = 'youxi'
```
```
tuple_demo = ()print(tuple_demo)#TODO:坑 ,一个元素的元组表示,不是一个元组,而是去掉括号后的原始数据类型# tuple_demo_2 = (1)# print(tuple_demo_2)# 如果想表示一个元素的元组,记得务必在元素后面加一个逗号# tuple_demo_3 = (1,)# print(len(tuple_demo_3))tuple_demo_4 = (1,3,4,5,5,)print(len(tuple_demo_4))tuple_demo_5 = 1print(tuple_demo_5)# 元组解包family_name,name = ('wang','yuze')# family_name,name = ('wang','yuze','hello') # 值要一一对应,否则会报错print(family_name)print(name)a,b = 3,4print(a)print(b)family_name,name,*other = ('wang','yuze','hello','world')print(family_name)print(name)print(*other)
```