目录
Python是一种解释型的编程语言。
小技巧
- 选定几行代码,按住Ctrl+/ 可以将其全部注释掉。也可以反注释。只对单行注释有效
一、基本概念
- Python语句不需要用分号隔开。
- Python不需要显示声明数据类型。
- Python中文文档声明注释,放在第一行用于指定Python文件的编码方式:#coding=utf-8等
- Python中用引号表示字符串,如果没有引号比如单独的a,单独的word.txt,这些必须是变量等,不然就不行,word.txt违反命名规则也不行。
- Python的语法是用换行符,缩进符区分的。也就是说不同语句之间用换行符区分,同一个语句的格式用缩进符区别。
C++ Python 单行注释 //单行注释 #单行注释 多行注释 /*多行注释*/ """多行注释"""
'''多行注释'''
本质上是一个字符串,你也
可以用'单行注释',区别在于三引号是可以多行的
变量定义 int a=50;//显示指明变量类型 a=50#不需要显示指明,自动识别 语句区分 分号:
int a=50;printf("%d",a);
换行符:(换行自动区分)
a=50
print(a)
分号:(用于区分同一行的语句)
a=50;print(a)
字符与字符串 字符:'a'
字符串:“Love”
字符:“a” or 'a' or
"""a""" or '''a'''
字符串:"a" or 'a' or
"""a""" or '''a'''
与 && and
或 || or 非 ! not
保留字
严格区分大小写。
import keyword print(keyword.kwlist) print(len(keyword.kwlist))
标识符命名规则
变量与常量
Python是动态语言,同一个变量标识符的类型是可以变化的。
Python的变量都是指针类型!这样也可以说明为什么类型可以变,实际上是指向的值可以变。
变量的类型与赋值给它的值的类型有关。
可以用内置函数type()来查看变量内型是什么。
luck_number=8 print(type(luck_number))#<class 'int'> luck_number='8888' print(type(luck_number))#<class 'str'>
Python允许不同变量指向同一个值,可以用内置函数id()来查看指向的内存地址
no=number=1024 print(id(no),id(number))#输出相同的内存地址
Python中的常量实际是一个约定俗成的东西,标识符名字全为大写字符的变量被称为常量,约定俗成它不可以被更改(虽然它可以,但是不建议,因为我们把它当做常量了~)
pi=3.1415926#定义了一个变量 PI=3.1415926#定义了一个常量
数据类型
一、整数类型
a=0b10000000;b=128;c=0O200;d=0x80 print(a,b,c,d)#128 128 128 128 #默认以十进制形式输出
在C语言中,八进制只需在前面加一个0
int a=0b10000000,b=128,=0200,d=0x80; printf("%d,%d,%d,%d",a,b,c,d);//128,128,128,128 printf("%d,%x,%o",b,b,b);//128,80,200 //无法直接以二进制形式输出
二、浮点类型
可以用科学计数法表示,e/E后面表示乘以10的几次方,十进制
number=123e3 #表示的是123000 number=1.55e2#表示的是155
三、复数
在python的数值中用j表示虚部
例如x=123+456j 等价于 数学意义上的 123+456i。
变量.imag表示虚数部分,变量.real表示实数部分,他们都默认是float型
a=123+456j e=1 b=a.real c=a.imag print(a+e,b,c)#(124+456j) 123.0 456.0
四、字符串类型
Python没有字符类型!
①多行字符串
info="""收件人:Yorelee 发货人:Sweet_Mary 地址:China """ print(info)#输出的是三行
②转义字符
注意这都是字符,都需要写成'\n' 或 "\n"才有效
一个制表位八个字符,'\t'的效果根据当前制表位数量来显示,如果制表位没填满那就空出没填满的空格。
原子符加在字符串前面,不能加在变量前面,它可以使得转义字符失效,原样输出。
print(r"北京\"欢\t迎\n你")#输出:北京\"欢\t迎\n你 print("北京\"欢\t迎\n你")#输出:北京"欢 迎 你
③字符串索引和切片
索引可以使用在变量上,也可以使用在常量字符串上
s="Yorelee love Sweet_Mary" print(s[0],s[-23])#索引 #输出Y Y print("Yorelee love Sweet_Mary"[0]) #输出Y print(s[0:7])#切片:从0号索引开始到7号索引,不包含7号 #输出Yorelee print("Yorelee love Sweet_Mary"[1:7]) #输出orelee print(s[:7])#默认从0开始 #输出Yorelee print(s[13:])#从13开始切到结尾 #输出Sweet_Mary print(s[13:-1])#从13号开始到-1号的切片 #输出Sweet_Mar
④字符串常用操作
其操作数可以是变量也可以是常量字符串。
y="爱你"*3 x="爱"+"你" print(y*2)#输出:爱你爱你爱你爱你爱你爱你 print("爱你"*6)#输出:爱你爱你爱你爱你爱你爱你 print(x)#输出:爱你 print("我" in x)#输出:False
五、布尔类型
print(1+True)#2
Python中一切皆对象,可以用内置函数bool()来测试其布尔值
非0整数的布尔值都是True
非空字符串的布尔值都是True
六、类型转换函数
①除法(/),自动将结果转换成浮点类型
②float类型转int类型,只截取整数,int(-3.9)值是-3
③将int类型转float类型,float(3)值是3.0
④将str类型转int类型,只有纯数字串能转换,int("500")的值是500
只能一次转换,如int("5.14")报错。
⑤将str类型转float类型,只能包含一个小数点的纯数字串,float(".15")的值是0.15
⑥chr()和ord()是相反的操作,ord()输入类型是一个字符,转成其Unicode编码的值
ord('a')的值是97,chr(97)的值是'a'
⑦hex()、oct()、bin()转换结果是一个字符串类型
hex(7)的值是"0x7"
oct(7)的值是"0o7"
bin(7)的值是"0b111"
运算符
一、算术运算符
这里和C++不一样的是
除法(/)、整除(//)、幂运算(**)
注意: s='1' num=0 num+=s-'0' 这是不合法的,因为s是字符串,'0'也是字符串,num是整型且字符串没有减法。 正确的是:num+=int(s)
print("整除:",10//3)#输出:3 print("幂运算:",10**3)#输出:1000 print("除法:",10/3)#输出3.333333333333
二、赋值运算符
链式赋值:
a=b=c=100
系列解包赋值:
a,b=10,20 #等价于a=10,b=20
a,b=b,a #原b的值赋值给a,原b的值赋值给a
字符串分解赋值:
a,b,c,d='room ' #相当于a='r';b='o';c='o';d='m';
a,b,c=input().split() #默认为所有的空字符,包括空格、换行(\n)、制表符(\t)分割
a,b,c=input().split(',',num)#num表示有几个分隔符,以逗号为分割,num可以省略
#注意,split是对字符串进行分割,分割后返回一个列表类型
三、比较运算符
和C语言里面一样诶。
不过python支持这样写:0<score<100
四、逻辑运算符
print(not 3>2 and 2<3)#输出:True print(30>3 or 10/0)#输出:True
not的优先级高于and和or;and 或 or的表达式从左到右看,左边出结果直接出结果右侧不会再计算。
五、位运算符
和C里面是一样的诶。
&、|、^是二元运算符
~是一元运算符
print(1&2)#0 print(1|2)#3 print(1^2)#3 print(~1)#-2
六、优先级
二、基本语句
一、print函数
print()函数默认输出一个换行符。
多内容输出,默认有一个空格。
空print()作用是打印换行符,
①输出数值
print(50)
②输出变量值
a=50 print(a)
③输出字符串
print('Love forever') print("Love forever") print('''Love forever''') print("""Love forever""") #三个单引号 和 三个双引号可以不用换行符输出多行字符串 #但是在单引号里面不能直接用单引号,可以用双引号,要用单引号需要用转义字符\,双引号里也一样 如: print('''Love forever''') """输出示例: Love forever """
④输出表达式
a=50 b=100 print(a*b) #输出5000
⑤多内容输出
a=50 b=100 print(a,b,'Love forever') """输出示例: 50 100 Love forever """
⑥输出ASCII码对应字符(使用chr())
print(chr(98)) #将98转换成ASCII表对应的字符,并输出
⑦输出到文件
fp=open('fp.txt','w') print('Love forever with you',file=fp) fp.write('Love forever with you') fp.close()
fp是文件对象,fp.txt是要写入的文件,w表示可写方式(如果文件不存在则创建文件,如果文件存在则清空文件再写入)
可以直接调用fp的write()函数写入,也可以使用print()直接写入,file指明文件。
⑧复杂的输出操作
+是连接符,sep分隔符,end输出结束符,file输出到的文件。它们需要放到输出内容的末尾来修饰。
sep默认为一个空格,end默认为'\n',file默认为None,+只能连接字符串
连接符+,可以连接变量和常量 如:'My name is'+name#name是一个字符串变量类型
print('Love'+' '+'U','U',sep=' ',end='') """+号连接符将表示输出时直接将俩字符串连接起来输出, 而逗号实际上用sep分隔符表示 Love U U """
⑨Python也有格式控制符
print("我爱%s"%"Sweet_Mary")#输出:我爱Sweet_Mary print("%s的年龄是%d"%("爸爸",40))#输出:爸爸的年龄是40
和C语言的格式控制符是一样的,在后面用%()分别参数列表,只有一个参数可以不用括号
二、input函数
返回值永远是字符串类型。可以使用强制类型转换转换成其他类型。
比如转换成整型:
x=input()
x=int(x) #但是一定要确保x中全是数字,不然无法转换。
x=input('提示文字')
在键盘中输入的内容保存至字符串变量x中。input的提示文字是用来提示输入的。
for i in range(5): x=input(f'请输入第{i}位的值')#这里的i转换成变量的值~
print()中也可以这样使用。
for i in range(5): x=print(f'第{i}位')#这里的i转换成变量的值~
提高:
lst=list(map(int,input().split())) #输入若干个整数,使用split()将字符串分割后 存入一个列表中 #使用map将列表中的数用int()转换,并返回一个迭代器 #使用list()转为列表 for i in lst: print(i) s=input().split('#') #输入一个用#代表结束的学生信息:Yorelee#男#21#100 print(type(s)) #<class 'list'> for i in range(len(s)): print(s[i],end=' ') #Yorelee 男 21 100
三、eval函数
eval是去掉字符串引号,执行里面的操作作为返回值。其本质就是脱掉其左右字符串,把没有引号的部分拿出来,这部分可能是变量,可能是表达式等等(如果脱掉引号无意义,那就会报错)
eval函数通常与input函数一起使用,将input函数的字符串类型返回值去掉其引号
。
x="""3.14+3""" print(eval(x))#输出:6.140000000000001 age=eval(input('请输入您的年龄:'))#键入10+11;'10+11'直接被替换为10+11 print(age)#输出:21 print(eval('age'))#在这个位置脱掉'age'的引号,相当于这个位置的eval('age')直接被替换为age,输出:21
三、程序
一、if语句
一、单分支
if 表达式:
成功语句1
成功语句2
"""if+空格+表达式+冒号
语句
"""
#用缩进表示结束, 空格数量不唯一,表达式是布尔类型返回值,Python中一切皆对象,一切皆有布尔值
当且仅当,语句块只有一句时,语句可以直接写在冒号后面
a=2;b=2 if a>b:print(a) if a<b:print(b)
示例:
name="Sweet_Marry" age=20 if name[:5]=="Sweet" and age>18 and age and not 0 and name: print(name) print("Yorelee") ''' Sweet_Marry Yorelee ''' #字符串只有空串 其布尔值才是False
二、双分支
if 表达式:
语句
else:
语句
"""
else和if对齐
语句也可以是多条,用缩进来判断结束,缩进必须严格,一条的时候一样可以同行
"""
if单条语句赋值
值1 if 表达式 else 值2 #当表达式是对的,返回值1,否则返回值2
三、多分支
if 表达式: 语句 elif 表达式: 语句 elif 表达式: 语句 elif 表达式: 语句 ···· else: 语句 """ else、elif和if对齐 语句也可以是多条,用缩进来判断结束,缩进必须严格,一条的时候一样可以同行 else是非必要的 """
四、嵌套if
if a>b: print(b) else: print(b) if(b<a): print(a+b) else: print(a-b) #缩进特别严格
二、多条件连接——match
match 值: case 值1: 语句 case 值2: 语句 ···· case _: #相当于default,也可以没有 语句 ''' 这里不需要break,直接每一case模块结束之后 直接跳出了了 这里的值可以是基本数据类型,组合数据类型,不同的值可以是不同数据类型。 '''
switch(值){//类比C语言的switch case 值1: 语句 break; case 值2: 语句 break; case 值2: 语句 break; default: }
三、遍历循环for
for 循环变量 in 遍历对象: 语句块
可以遍历文件、字符串、range()函数等
①遍历字符串
for i in 'hello': print(i) #每次取出一个字符赋值给i #等价于: s='hello' for i in s: print(i)
②遍历range()函数的整数序列
for i in range(1,11): print(i)#1~10 #range(n,m)包含n不包含m的整数序列, #每次取出一个整数赋值给i for i in range(10): print(i) #0~9 #range(n)包含0,不包含n的整数序列,一共n个整数
例如:找出100~999的水仙花数
for i in range(100,1000): #别忘了加冒号 x=i%10 y=i//10%10 #注意Python的整除! z=i//100 if i==x**3+y**3+z**3: #直接用幂运算! print("%d是水仙花数"%(i))
③正常结束(全满执行完毕),可以用else执行一条语句
for 循环变量 in 遍历对象: 语句块1 else: 语句块2 #只有当遍历对象全都被遍历之后才会执行else之中的内容。中间被break不会执行
④分解赋值遍历(组合数据类型)
s0 = tuple([1, 2, 3, 4]) s1 = ['a', 'b', 'c', 'd'] s2 = {1: 'dog', 2: 'cat'} s3 = {1, 2, 3, 4} for i, j in zip(s0, s1): print(i, j, end='\t') print() for i, j in s2.items(): print(i, j, end='\t') print() for i, j in zip(s3, s1): #集合是无序的 print(i, j, end='\t') print() for i, j in enumerate(s1): print(i, j, end='\t') print() ''' 1 a 2 b 3 c 4 d 1 dog 2 cat 1 a 2 b 3 c 4 d 0 a 1 b 2 c 3 d '''
变量并不是临时的:
for i in range(1,6): j=i print(j) #输出:5
四、无限循环while
while 表达式: 语句块 #同样可以使用else,这个else也是while正常判断条件结束的时候执行,如果中间break就不会执行 while 表达式: 语句块1 else: 语句块2
正常结束用else的一个好处是,有的时候我们用一个标记flag=True,然后循环判断条件是否成立,不成立就flag=False,然后break,之后我们判断flag是True的时候会执行语句。我们可以减少这个flag,变成:
while i<100: if 条件: break else: 成功语句 #等价于: flag=True while i<100: if 条件: flag=False break if flag: 成功语句
五、 break and continue
①break:退出循环结构
②continue:跳过本次循环,注意更改while的条件
六、空语句 pass
没啥作用,占位符。
for i in range(1,10): pass if True: pass
七、例子
一、打印等腰三角形
for i in range(1,6): for j in range(1,10): if(6-i<=j<=4+i): print('*',end='') else: print(' ',end='') print() ''' for i in range(1,6): for j in range(1,6-i): print(' ',end='') for j in range(1,i*2): print('*',end='') print() '''