编辑器从sublime变为pycharm
PyCharm -> File -> new project -> project interpreter:new virtualenv environment
new environment using -> 创建虚拟解释器
existing interpreter -> 系统解释器
解释器:
系统解释器(默认会将系统中的标准库和所有的第三方库都加载,这样会影响加载)
虚拟解释器(后期需要第三方解释器的时候,创建虚拟解释器避免将所有第三方库都放在系统解释器中;前期不建议创建,因为每创建一次虚拟解释器会复制一遍系统解释器,会让第一次解释很慢)
红色波浪线 - 错误警告(语法错误)
灰色警告 - 提示警告 (格式错误;建议修改,但不强求,表示代码不规范,但能运行)
绿色警告 - 单词错误
python代码(经常是从其他地方拷贝过来时)运行不了(就是没有解释器)
解释器出现红色(其中之一出现红色都会)会影响代码运行
前言回顾
1.python是解释性语言,代码能运行,则必须有解释器
2.变量
name = 'tom'
age, sex = 18, '女' # 声明变量时赋不同的值
a = b = 10 # 声明变量时赋相同的值
3.运算符
数学、比较、逻辑、赋值 (赋值运算符优先级最低)
4.if分之结构
if 条件语句:
代码块1
elif 条件语句:
代码块2
else:
代码块3
5.循环结构
for 变量 in 序列:
循环体
变量依次取序列中的值,每取一次执行一次循环体
while 条件语句:
循环体
6.数字类型:int、float、bool、complex
二进制、八进制、十六进制(前面需要加前缀)
0b, 0o, 0x
bin(), oct(), hex()
1e2 = 100 1e-2 = 0.01
True == 1, False == 0
复数:1+10j
字符串
1.什么是字符串(str)
1)字符串是python提供的容器数据类型(序列), 不可变、有序
不可变 - 不支持增删改; 有序 - 支持下标操作
2)python中的字符串是用单引号或者双引号引起来的的字符集; 引号里面的每个基本单元叫字符
str1 = 'hello'
2.字符
python中只有字符概念,没有字符类型(char)
1) 普通字符:数字、字母、普通符号、中文、日语等
str2 = "a"
print(type(str2), str2)
2) 转义字符:
在特定的符号前加\来表示特殊功能或者特殊意义的字符
\n - 换行
\' - 单引号字符(不是字符串开头/结尾标志)
\" - 双引号字符
\\ - 反斜杠字符(没有转义功能)
\t - 制表符(相当于tab)
str3 = '\t123\'\nabc \\none'
print(str3)
# 代码不想写在一行或者一行写不下时
str3 = '123'\
'abc'
print(str3)
# 阻住转义:在字符串的最前面加r或者R,能够阻住字符串中所有的转义字符转义
print('=====')
str4 = r'\thow\nare\nyou\"'
print(str4)
# \t,\n等转义字符也有长度,为1
'\tabc\n123' # 长度:8
r'\tabc\n123' # 长度:10
3) 编码字符:在字符串中用'\u四位的十六进制数'来表示一个字符
\u字符编码值的16进制数 - 表示一个字符 例如:a - 97
中文字符在unicode编码范围:\u4e00 - \u9fa5
str5 = '123\u4e13' # \u4e12 是一个字符
print(str5)
3.1) 字符编码:
计算机本身只有直接存储数字的能力(存数字的二进制的补码),为了能存储数字以外的符号,
有特定的字符编码表约定每个字符有对应的固定的数字用来对字符进行存储,即每个字符对应固定的数字就是字符的编码值
每个字符和数字的一一对应关系就是字符编码表,常见的编码表有:ASCII码表,Unicode编码表
ASCII码表采用一个字节对字符进行编码:0-127(2**7) 最高位为符号位
Unicode编码表采用2个字节对字符进行编码,包含了ASCII码:0-2**15
chr函数:chr(编码值) - 获取编码值对应的字符
ord函数:ord(字符) - 获取指定字符对应的编码
print(chr(100), chr(0x4e00))
print(ord('嗷'), ord('呜'))
练习:查看日语的所有片假名
for code in range(0x4dc0, 0x4dff):
print(chr(code), end=';')
2.字符串操作:查(不支持增删改)
1) 获取单个字符
语法:字符串[下标] - 获取指定下标对应的字符
说明:字符串 - 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
[] - 固定写法
下标 - 又叫索引,值是整数;字符串确定后,字符串中所有字符都有一个确定的下标/索引表示这个字符在字符串中的位置
python中下标有两种,位置从前往后是 0 ~ 字符串长度-1;位置从后往前是 -1 ~ -字符串长度
注意:获取单个字符的时候下标不能越界
str1 = 'hello'
print(str1[0], str1[3]) # h l
print(str1[-1]) # o
str2 = '\tabc 123'
print(str2[2], str2[5]) # b 1
# print(str2[100]) # IndexError: string index out of range
# print(str2[-20]) # IndexError: string index out of range
print('how are you'[2])
2) 获取部分字符(字符串切片)
语法:字符串[开始下标:结束下标:步长] - 从开始下标开始获取,每次增加步长取下一个值;取到结束下标前为止(结束下标对应的值取不到)
说明:字符串 - 结果是字符串的表达式(字符串值、字符串变量、运算结果是字符串)
[] - 固定写法
开始下标 - 下标,整数。能取到对应的字符
结束下标 - 下标整数,对应的字符取不到
步长 - 整数。如果步长正数,从前往后取;如果步长是负数,从后往前取
注意:1.字符串切片的结果都是字符串
2.如果步长是正数,那么开始下标对应字符要在结束下标对应的字符的前面,才能取到值;
如果步长是负数,那么开始下标对应字符要在结束下标对应的字符的后面,才能取到值
print('=====')
str3 = 'abc+123'
print(str3[0:3:2]) # ac
print(str3[2:-2:1]) # c+1
# print('结果:', str[2:-2:-1]) # ''空串取不到
print(str3[0:-1:1]) # abc+12
print(str3[-1:2:-1]) # 321+
print(str3[-1:1:-2]) # 31c
print(str3[2:100:1])
3) 获取部分字符的简写
1.省略步长 - 步长为1
语法:字符串[开始下标,结束下标] <==> 符串[开始下标:结束下标:1] 默认步长为1
print('=====')
str4 = 'hello world'
print(str4[3:-2]) # lo wor
2.省略开始下标 - 步长为正从字符串开头往后获取;步长为负从字符串从字符串最后往前获取
语法:字符串[结束下标:步长]、字符串[:结束下标]
print(str4[:5]) # hello
print(str4[:5:-1]) # dlrow
3.省略下标 - 步长为正,取到字符串最后一个字符为止;步长为负取到第一个字符为止
语法:字符串[开始下标::步长]、字符串[开始下标:]
str4 = 'hello world'
print(str4[1:]) # ello world
print(str4[1::-1]) #eh
print(str4[:]) # 'hello world' 整个字符串
# 字符串倒序
print(str4[::-1]) # dlrow olleh
4) 遍历字符串 - 将字符串中的字符一个一个的取出来
for 变量 in 字符串:
循环体
直接遍历,变量取到的就是字符
for char in str4:
print(char)
间接遍历,通过遍历下标遍历字符
for index in range(11):
print(str4[index])
for index in range(11):
print(index, str4[index])
练习:统计输入的字符串中,字母'a'出现的次数
例如:输入'how are you! fine, thanks.and you' 打印:3
aaabcabc -> 4
value = input('请输入一个字符串:')
count = 0
for char in value:
if char == 'a':
count += 1
print(count)
print('======')
value = 'asdadfakdfad'
count = 0
for index in range(len(value)):
if value[index] == 'a':
count += 1
print(count)
字符串相关操作
1.字符串的运算:
1)数学运算符:+,*
+: 两个字符串相加 -> 将两个字符串拼接[产生]一个新的字符串
str1 = 'abc' + 'hello'
print(str1) # abchello
*: 字符串*正整数/ 正整数*字符串 -> 字符串重复指定次数产生一个新的字符串
str2 = 'abc' * 3 # 3 * 'abc'一样
print(str2)
2)比较运算符:>, <, >=, <=, ==, !=
针对两个字符串进行比较
str3 = 'abc'
print('abc' == str3) # True
字符串比较大小:按位置从前往后一对一对的比较,找出第一对不相等的字符,比较编码值
print('abcdef' > 'abz') # False
print('你好' > 'hello') # True
应用:
判断一个字符是否是小写字母:'a'<=char<='z'
判断一个字符是否是大写字母:'A'<=char<='Z'
判断是否是字母:'a'<=char<='z' or 'A'<=char<='Z'
判断是否是数字字符:'0'<=char<='9'
判断是否是中文(4e00-9fa5):'\u4e00'<=char<='\u9fa5'
练习:统计一个字符串中大写字母的个数
例如:How Are You! -> 3
value = 'What Are You Doing?'
count = 0
for char in value:
if 'A' <= char <= 'Z':
count += 1
print(count)
3)赋值运算符:=, +=, *=
str4 = '你好'
str4 += 'hello'
print(str4)
str4 *= 2
print(str4)
2.in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('abc' in '123abc') # True
print('ab' in '12acb') # False
print('abc' not in '123abc') # False
3.len
len(字符串) - 获取字符串长度(字符的个数)
print(len('abc')) # 3
print(len('\tabc')) # 4,转义字符占位1
str5 = ' abc' # 非转义字符占位可能是多个
print(len(str5)) # 7
print(len('\u4e00abc')) # 4,字符编码占位1
for index in range(len('shdfasf')):
print(index)
4.str
str(数据) - 将其他类型数据转换成字符串
所有类型是数据都可以转换成字符串:转换的时候直接在数据外面加引号
print(str(100)) # '100'
print(str(12.5)) # '12.5'
print(str(True)) # 'True'
5.格式字符串:在字符串中用格式占位符代替字符串中变化的部分,然后再使用数据对变化的部分进行赋值
语法:包含格式占位符的字符串 % (数据列表)
说明:数据的个数和类型要和前面字符串格式占位的个数和类型保持一致
格式占位符:%s - 字符串,数字也可以
%d - 整数
%.Nf - 浮点数(N控制小数后小数的位数)
%c - 字符、字符对应的编码值
name = input('姓名:')
age = int(input('请输入年龄:'))
money = 3.5
# '我是XX,今年XX岁,薪资:xxk'
message = '我是%s,今年%d岁,薪资:%.1fk 等级:%c' % (name, age, money, 'A')
# (name, age, name, 65) %c 可以是字符,也可以是字符对应的编码值
# message = '我是'+name+',今年'+str(age)+'岁'
print(message)
字符的对象方法
字符串.函数名()
1. capitalize() - 将字符串中的第一个字符转换成大写字母(只有第一个)
str1 = 'abc'
print(str1.capitalize()) # 操作不会影响原数据
print(str1)
2.设置对齐方式
字符串.center(width, fillchar) - 让字符串在新字符串中居中,width控制新字符串的宽度,fillchar是填充字符
字符串.rjust(width, fillchar)
字符串.ljust(width, fillchar)
字符串.zfill(width) <==> 字符串.rjust(width, '0')
str1 = 'abc'
print(str1.center(7, '*'))
print(str1.ljust(7, '%'))
print(str1.rjust(7, '='))
num = 5 # 005
# py1902001 py1902012
print(str(num).rjust(3, '0'))
print(str(num).zfill(3))