下载python 要配置环境变量
进入Python的官方下载页面
http://www.python.org/download/
安装PyCharm工具,网上可以下载,很多资源,也有免安装的版本,在网上找激活码
链接: https://pan.baidu.com/s/1Y6S_n3KbnjOdE9EDZ5nixw?pwd=d2m7 提取码: d2m7
复制这段内容后打开百度网盘手机App,操作更方便哦
PyCharm中文插件
一、基础语法
1、注释
Python中单行注释以 # 开头
多行注释可以用多个 # 号,还有 ‘’’ ‘’’
2、行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
3、变量
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名
等号(=)运算符右边是存储在变量中的值
二、基本数据类型
Python 中有5个标准数据类型:String(字符串)、Number(数字)、List容器、Bool(布尔)、None(空值)
容器又可分为List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)四种。
其中String(字符串)、Number(数字)、Tuple(元组)、Bool(布尔)、None(空值)为不可变数据;List(列表)、Dictionary(字典)、Set(集合)为可变数据。
type(str) 可以查看数据类型
(一)、字符串(String)
字符串就是表示一串字符,字符可以是中文,英文或者数字,或者混合的文本。
Python中的字符串用英文状态下的单引号 ’或双引号 " 括起来。
1、用+连接字符串
2、用%格式化字符串,基本用法是将值插入到%s占位符的字符串中。%s,表示格式化一个对象为字符。
(二)数字(Number)
数字类型分为整数型和浮点型
整型:像11、60这种整数
浮点型:像3.14、2.50这种带小数的
# 逻辑运算符
x = 10
y = 2
print(x * y, x + y, x - y, x / y, x % y)
数据强制转换
索引、下标
切片
print(str1[:]) # 取所有的
print(str1[3:]) # 可以单个省略,从第三个开始取
print(str1[-3:6]) # 可以左右同时取
步长
str1='容器是用来存放数据的,是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取'
print(str1[0:15:1]) # 一步一取
print(str1[0:20:2]) # 两步一取
print(str1[20:0:-2]) # 倒着两步一取
print(str1[20::-2]) # 倒着两步一取
练习
# 定义变量passage,赋值为字符串,内容如下: '123Process finished with exit& code 0%'
passage='123Process finished with exit& code 0%'
# 1)倒着输出打印该字符串
print(passage[::-1])
# 2)截取'ss finished w’
print(passage[8:21])
# 3)截取字符串的'exit'(使用正序和倒序两种)
print(passage[25:29])
print(passage[-13:-9:])
# 5)截取后7位
print(passage[-7::])
# 6)截取第4位到第12位
print(passage[3:11:])
print(passage[-35:-28:])
字符串方法
1 index
str1='字符串就是表示一串字符,字符可以是中文,英文或者数字,或者混合的文本'
print(str1.index('中文')) # 到中字
print(str1.index('文')) # 到第一个文字
print(str1.index('文', 20, 30)) # 从20开始取,30结束,取第一个‘文’字
2 count
3 大小写转换
str2 = 'd hjkjcdfu ciDGHSKd cJdfs gjcHUIH'
print(str2.lower()) # 变小写
print(str2.upper()) # 变大写
print(str2.swapcase()) # 大小写互换
print(str2.title()) # 首字母大写
4 切分字符 split
str3 = 'my name is username , you are ok?'print(str3.split()) # 默认空格切割
print(str3.split('m')) # 以m切割 m不显示
print(str3.split('m',1)) # 以m割 , 指定次数只切一次
5 判断是否是纯数字组成
str5 = 'my name is 1234'
str6 = '1234'
print(str5.isdigit())
print(str6.isdigit())
6 统计字符串长度的函数 len(str)
7 运算符 in not in
8 字符串强制转换
a = 29.0
print(type(a))
str8 = str(a)
print(type(str8))
9 字符串格式化输出
name1 = '有钱'
name2 = '辛苦'
print('我们%s,但是%s' %(name1, name2)) # 字符串拼接,占位符 老方法name1 = '有钱'
name2 = '辛苦'
print(f'我们{name1},但是{name2}') # 格式化输出
(三)容器(List)
容器是用来存放数据的,是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。容器是一种可以包含其他类型对象(如列表、元组、字典等)作为元素的对象
以下面的病例数据为例,来看容器的各项操作:
列表(list)
列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号[]之间、用逗号分隔开的元素列表。具体操作如下:
lis = [1, 1.23, "apple", [1, 2, '上海', [8, 9, "apple", "orange"]], (1, 2), {'x': 'y', 'z': 1}]
print(lis[4][1]) # 取 2lis[1] = 7.21
print(lis) # 修改单个列表值lis[:2:] = '改了值'
print(lis) # 修改多个列表值,会被拆分
lis[:2] = ['改了值'] # 修改多个列表值,以列表[]的方式就是一个整体
print(lis)
lis[:3] = ['改了值', 'www'] # 修改多个列表值,以列表的方式就是一个整体
print(lis)
print(lis[::-2])
lis[::-2] = ['改了值',23456,'ddddd']
print(lis) # 按 步长 切的话,需要替换全部切下来的元素,数量得相同
列表常用方法
增加元素
list1 = [123, 'dsdsff', 'dssfeewwrwr', 8.94]
list1.append('eeeee') # 末尾追加元素
print(list1)list1.insert(2,'eeeee')
print(list1) # 按索引加元素list2 = [1,4,2.3,'rrrr']
list1.extend(list2) # 添加列表
print(list1)
删除元素
list1 = [123, 'dsdsff', 'dssfeewwrwr', 8.94,7,1067]
list1.pop(-2) # 按索引删
print(list1)list1.remove(123)
print(list1) # 按内容删del list1[2] # 按索引删
print(list1)
元素方法
list1 = [123, 'dsdsff', 'dssfeewwrwr', 8.94, 7, 1067, 'dsdsff']
print(list1.count('d')) # 不完整元素无用
print(list1.count('dsdsff')) # 对元素统计出现次数 print(list1.index('dsdsff', 2)) # 按内容查索引,可以添加次数list1.reverse() # 反转列表
print(list1)list1.clear() # 请空
print(list1)
排序
list1 = [1, 45, 7.3, 694, 909, 12.7]list1.sort() # 永久排序
print(list1)print(sorted(list1)) # 临时排序
print(list1) # 列表本质顺序没变
函数
print(len(list1))
print(max(list1))print(min(list1))
print(sum(list1))
list强制转换列表
2、元祖(Tuple)
元组的元素不能修改。元组写在小括号()里,元素之间用逗号隔开。
元组是不可变类型,不支持增删改,只能查询
元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用:
常用方法和函数与列表一样
增
变量.append(元素) 在列表中追加元素
变量.insert(索引,元素) 在指定的位置添加元素
变量.extend(列表) 在列表中追加一个列表删除
变量.pop(索引) 通过指定索引删除,如果没有指定索引,默认删除最后一个
变量.remove(元素) 删除指定元素
del 变量[索引] 变量[切片] 变量[步长]变量.count(元素) 元素出现的次数
变量.index(元素,起始位,截止位) 元素的索引
变量.clear() 清空列表
变量.reverse() 翻转列表 [::-1]排序
变量.sort() 永久排序
sorted(变量) 临时排序常用函数
len(变量) 统计元素长度
sum(变量) 求和
max(变量) 求最大值
min(变量) 求最小值
3、字典(Dictionary)
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号:分割,每个对之间用逗号(,)分割,整个字典包括在花括号 { } 中 ,键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,不能重复的,如字符串,数字。
增删改方法
a = {'name': 'user', 'age': 22, 'addr': '苏州'}a['name'] = 'long' # 修改键的值
print(a)a['ph'] = 16587392789 # 加的键没有的话,默认增加一个键值对
print(a)del a['ph'] # 删除
a.pop('addr') # 删除
print(a)
常用方法
dic1 = {'name': 'user', 'age': 22, 'addr': '苏州'}k=dic1.keys() # 返回所有的键
print(k)v=dic1.values() # 返回所有的值
print(v)i = dic1.items() # 返回键值对
print(i)
4、集合(Set)
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用set() 而不是 { } ,因为 { } 是用来创建一个空字典。
集合的修改元素,需要将要修改的元素删除然后再增加新元素
se = {'name','user','age',22,'addr','苏州'} # 集合
se1 = set() # 空集合
se2 = {1,4,6,1,7,343,4} # 集合元素不能重复,重复不显示
print(se2)
增删改等方法
se = {'name', 'user', 'age', 22, 'addr', '苏州'}se.add('phone') # 增加元素
print(se)se.pop() # 随机删除
print(se)se.remove(22) # 指定元素删除
print(se)se.discard('name') # 错误保护机制 删除不存在的元素不报错
print(se)se.clear() # 清空
print(se)
运算符
a = {'name', 'user', 'age', 22, 18, 40}
b = {27, 22, 45}
print(a - b) # 去除相同的值print(a | b) # 合并 去除重复print(a & b) # 返回两个集合里相同的值print(a ^ b) # 返回两个集合里不同的值
# 综合练习
list_test = [{'t1': [1, 2, 3], 't2': ('good', 'python')}, [233, True, ('java', 'fast')], 'apache']
# 1)往t1的值中追加一个数字4
list_test[0]['t1'].append(4)
print(list_test)
# 2)取出t2中的python,赋值给变量txt_01
txt_01 = list_test[0]['t2'][1]
print(txt_01)
# 3)定义一个变量num_02 = 2
num_02 = 2
# 格式化输出 I like python,今天是学习python的第2天
print(f'I like python,今天是学习python的第{num_02}天')
# 4)取出java中的ava
a = list_test[1]
b = a[2][0]
print(b[1::])
# 5)在233所在的列表中第2位插入一个元素 'China'
list_test[1].insert(1, 'china')
print(list_test)
# 6)修改True的值为字典中't1'对应的值
t1 = list_test[0]['t1']
list_test[1][2] = t1
print(list_test)
(四)、布尔类型
布尔值只有两个:True 和 False
布尔值加上比较运算符,与两边的数据一起构成了布尔表达式,返回布尔值。所谓布尔表达式,其实就是条件测试的别名。
注:比较运算符
等于 == 大于等于>=小于等于<= 不等于 !=大于 > 小于 <
(五)、空值None
与SQL中null是一个意思,表示该值是一个空对象。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。可以将None赋值给任何变量,也可以给None值变量赋值。
四、条件判断
Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
Python 中用elif代替了else if,所以if语句的关键字为:if – elif – else。一般形式如下所示:
注意:
1、每个条件后面要使用冒号:,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
3、在Python中没有switch – case语句。
常见的边界条件分为两种
1.值比较:即>(大于),<(小于),>=(大于等于),<=(小于等于),!=(不等于),==(等于)
2.逻辑比较:and(并且),or(或者),not(不是)
3、多条件判断:当有多个条件时,如何根据条件进行判断
a = input('请输入成绩:')
print(type(a)) # 类型是stra = int(input('请输入成绩:')) # 强制转换类型为int
print(a)
if a > 60:print("及格")
else:print('下次努力')# ---------------------------------------
t = input('请输入天气:')
if t == '晴天':print("去夏游")
else:if t == '阴天':print('去图书馆')else:if t == '雨天':print('睡觉')else:print('输入的不正确')
逻辑运算符 and or not
# 4、身份证有效性校验
# if 语句判断练习:
# 1、提示用户输入身份证号
# 2、判断用户输入的身份证长度是不是18位,前17位是数字
# 最后一位可以是字母x和X或者数字
# ---如果不是,提示"输入错误"
# ---如果是,读取身份证里的出生年月日,并赋给birthday这个变量
card = input('请输入你的身份证号,18位:')if len(card) == 18 and card[:17].isdigit():# if card[-1::] == 'X' or card[-1::] == 'x' or card[-1::].isdigit():if card[-1::] in ['X', 'x'] or card[-1::].isdigit():birthday = card[6:14]print('宁的生日是' + birthday)else:print("2号码输入错误,请检查")
else:print("号码输入错误,请检查")# atm取款题目
# 模拟ATM取款机 设置用户余额为5000元
# 1、提示用户输入银行卡密码 密码正确,进入下一个判断,密码错误,提示输入有误
# 2、提示用户选择需要办理的业务(存款/取款)
# 如果选择存款业务,提示让用户输如存款金额,最后显示存款后余额
# 如果选择取款业务
# 判断取款金额是否超过了余额
# 超过了: 告知用户余额不足
# 未超过: 提示取款成功,请取走现金,并显示当前剩余余额money = 5000
pad = input('请输入银行卡密码(六位数字):')
if len(pad) == 6 and pad.isdigit():if pad == '123456':fw = int(input("请选择1 存款服务,2 取款服务:"))if fw == 1:print(f"您的余额是{money}")cun = int(input("请输入存款金额:"))money = money + cunprint(f"存款成功,您的余额是{money}")else:if fw == 2:print(f"您的余额是{money}")qu = int(input("请输入取款金额:"))if money >= qu:money = money - quprint(f'取款成功,请取走现金,当前剩余余额为{money}')else:print('余额不足')else:print("服务输入错误")else:print("密码输入错误,请重新输入")
else:print("密码格式错误")
五、循环
循环就是把容器中每一个的数据都按照特定的规则进行重复处理数据的方式。Python 中的循环语句有 for 和 while两种。这里主要介绍for循环。
for循环的一般格式如下:
for i in 容器: 要做的事情for i in 序列 :for i in 字符串 : 会从第一个到最后一个,来个遍for i in 字典 :for i in 元组 :for i in 列表 :break:退出循环
continue:跳出本次循环,后面的代码不执行,进行下次循环while 条件:循环体
else :非循环体
for i in [{1, 4, 6.7}, 3, 67, 'll']:print(i)for i in [3, 67, 'll']:print(i)for i in (3, 67, 'll'):print(i)for i in 'java':print(i)dic={'name':'java','user':'ww','add':'sh'}
for i in dic.keys():print(i)
for i in dic.values():print(i)
# for i in range(起始位,截止位,步长):
for i in range(10):print(i)# ----------------练习--------------
# ['笔记本一台','冰箱一台','奔驰一辆','谢谢惠顾'...]
# 用户进行积分抽奖 20积分抽一次
# 如果未中奖,告知用户没有中奖,还剩?积分,还能抽多少次
# 如果抽中,告知用户抽到了什么,还剩多少积分,还能抽多少次
# 抽完一次之后,如果积分足够,要询问用户,是否继续抽奖
# ---是 继续抽
# ---否 结束抽奖
# ----- for ---------
list1 = ['笔记本一台', '冰箱一台', '奔驰一辆', '谢谢惠顾', '中性笔', '', '', '', '', '', '']
jf = float(input('您有多少积分:'))
n = jf / 20
for i in list1:if jf >= 20:random_value = random.choice(list1)if random_value in ['', '谢谢惠顾']:jf = jf - 20n = n - 1print(f'您未中奖,还剩{jf}点积分,还能抽{n}次')h = input("是否要抽奖:")if h == '是':print('开始抽奖!')continueelse:if h == '否':print(f'您还剩{jf}点积分,还能抽{n}次')breakelse:print('回答错误,跳出系统')breakelse:jf = jf - 20n = jf // 20print(f'您中了{random_value},还剩{jf}点积分,还能抽{n}次')h = input("是否还要抽奖:")if h == '是':print('开始抽奖!')continueelse:if h == '否':print(f'您还剩{jf}点积分,还能抽{n}次')breakelse:print('回答错误,跳出系统')breakelse:break
print("积分不足")
# ---------------------while------------------------
jf = float(input('您有多少积分:'))
n = jf // 20
while n >= 1:if jf >= 20:random_value = random.choice(list1)if random_value in ['', '谢谢惠顾']:jf = jf - 20n = n - 1print(f'您未中奖,还剩{jf}点积分,还能抽{n}次')h = input("是否要抽奖:")if h == '是':print('开始抽奖!')continueelse:if h == '否':print(f'您还剩{jf}点积分,还能抽{n}次')breakelse:print('回答错误,跳出系统')breakelse:jf = jf - 20n = jf // 20print(f'您中了{random_value},还剩{jf}点积分,还能抽{n}次')h = input("是否还要抽奖:")if h == '是':print('开始抽奖!')continueelse:if h == '否':print(f'您还剩{jf}点积分,还能抽{n}次')breakelse:print('回答错误,跳出系统')breakelse:break
print("积分不足")
五、函数
函数是根据一定的规则进行运算,可以重复使用的代码段。函数的3个功能为:实现特定功能、输入数据、输出结果。大部分时候我们只需要调用系统自带的函数或者第三方包里的函数即可,有的时候在处理复杂数据时,需要自定义函数。
函数一般格式如下:
def 函数名称(参数1,参数2):函数体Return 输出
def s(a, b):return a + b
def p():print('计算')c = 4 * s(1, 4)
p()
print(c)
当函数参数为不可变数据类型(字符串、数字,元祖,布尔,空值None),如果我们定义的是改变列表的值,传递的只是该数据类型的值,不会改变数据结果。
当函数参数为可变数据类型(列表、集合、字典)如果我们定义的是改变列表的值,传递的是该变量的引用地址,会改变数据结果。
变量作用域
Python的作用域一共有2种:全局作用域,局部作用域。
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。