Python基础语法(上)
目录
一、print函数及常量表达式
1.print函数
2.常量表达式
二、变量
1.定义变量的规则
2.python的动态类型特性
3.字符串
三、注释
四、input函数
1.input函数
2.变量类型转换
五、运算符
1.算数运算符
2.关系运算符
(1)整形的比较
(2)字符串的比较
(3)浮点数的比较
3.逻辑运算符
(1)逻辑运算符的种类
(2)and和or的短路求值
4.赋值运算符
(1)链式赋值
(2)多元赋值
(3)复合赋值
六、选择语句
1.选择语句的写法
(1)单个if
(2)if与else
(3)if、elif与else
2.python的缩进和代码块
3.空语句pass
七、循环语句
1.while循环
2.for循环
3.break与continue语句
继上篇文章我们准备好python的开发工具后,我们继续在pycharm中书写代码。
注意在pycharm中,按Ctrl+Shift+F10运行代码。
python语言以每一行为一句代码,不需要在最后加上分号。
一、print函数及常量表达式
1.print函数
print()是一个全局的输出函数,可以把内部的内容打印到下面的控制台。
print("hello world")#这是最简单的hello world代码#结果为hello world
python的输出使用fstring类型(function string),在字符串前加f,在需要打印变量值的地方将变量或表达式用{}括起来。
a = 10
print(f"The value of a is {a}")
#输出:The value of a is 10
print(f"The value of a is {a+10}")
#输出:The value of a is 20
2.常量表达式
在print函数中输入加减乘除四则混合运算表达式(+ - * /)打印出表达式的结果,当然同样可以加括号表示先算哪里后算哪里。因此python可以当作简易计算器使用。
print((4+2*2)*(20-2*7))#结果为48
二、变量
1.定义变量的规则
python的变量类型有整形、浮点型、字符串、布尔类型等等。
在之前C语言的学习中,我们定义变量都是:
变量类型 变量 = 值;(int a = 1;)
而对于python而言,变量定义只需要:
变量名 = 值
不需要在前面显示加类型,变量的类型会根据所赋值的类型确定。
python变量名的定义规则与C语言基本相同(只能由数字、字母、下划线组成,数字不能开头……)
value1 = 1
print(value1)# 打印变量,不需要像C语言一样控制输出的类型
print(type(value1))# type()函数可以看到变量的类型为<class 'int'>,也就是intvalue2 = 0.5
print(type(value2))# type()函数可以看到变量的类型为<class 'float'>,也就是double。
#python的浮点数都是C语言中的double类型#python有自己的字符串类型str,字符串可以由单引号和双引号引起
a1 = "hello world"
a2 = 'hello world'
print(type(a1))#输出<class 'str'>,表示类型为str#布尔类型(bool)表示真假,只有True和False两种状态,一般用作函数的返回值
judge1 = True
print(type(judge1))
judge2 = False
print(type(judge2))#打印出<class 'bool'>,即bool类型
2.python的动态类型特性
在python程序中,一个变量是什么类型,是可以在 "程序运行" 过程中发生变化的,这个特性称为 "动态类型"。
python变量的类型是可以改变的,我们也可以在变量后面加上类型的声明。
#我先定义一个val变量初始化(定义变量后的第一次赋值叫做初始化)为1,此时类型为int
val = 1
print(val)
#我又改变val变量的内容为字符串,此时类型为str
val = "hello"
print(val)
#我双改变val变量的内容为浮点数,此时类型为double
val = 0.5
print(val)val:int = 2
#val变量的类型建议指定为int,初始化为2
#但这只是个声明,不是说你后面声明了什么类型,该变量此时就是什么类型的
val:int = "string"
print(type(val))
#输出类型为str
#输出类型为str
此时你惊奇地发现,val变量在运行中类型在不断发生变化,这是C语言无法实现的。
3.字符串
python本身就有自己的字符串类型,字符串可以由单引号和双引号引起。
a1 = "hello world"
a2 = 'hello world'
print(type(a1))
#输出<class 'str'>,表示类型为str#如果我们字符串内部包含双引号,就可以用单引号(')引起
print('My name is "bob guo"')
#结果为My name is "bob guo"#如果我们字符串内部包含单引号,就可以用双引号(")引起
print("My name is 'bob guo'")
#结果为My name is 'bob guo'#如果我们字符串内部既包含单引号又包括双引号,就用三引号(''')引起
print('''My 'name' is "bob guo"''')
#结果为My 'name' is "bob guo"#查看字符串的长度可以用函数len()
s1 = "hello"
s2 = " world"
print(len(s1))
#print函数打印字符串s1长度为5
#字符串也可以拼接
print(s1+s2)#表示把s1与s2拼接起来,输出为hello world
#要想使用拼接必须是两个字符串类型,int的10和str的s1就不能拼接
三、注释
注释是一种特殊的代码,它不影响程序的执行,但是能够起到解释说明的作用。
单行注释:
#+内容
多行注释:
'''
print(hello)
print( )
print(world)
'''
在pycharm中鼠标选中代码然后点击Ctrl+/进行批量注释。
四、input函数
1.input函数
与C语言中的scanf函数类似,python中的输入函数为input(),且用一个变量接收返回值。
如果我们不指定接收数据的变量的类型,那么系统默认这个变量的类型为str。
a = input("请输入一个值:")
#""中的字符串为输入的提示,输入数据后用变量a接收
print(type(a))
print(f"a的值为:{a}")#输出:
#请输入一个值:10(10是我自己输入的)
#<class 'str'>
#a的值为:10
2.变量类型转换
通过下面的语句:
变量 = 类型(变量)
可以实现将一个变量转化为该类型的变量。
下面的代码就实现了变量转换并计算数据的平均值。
#输入四个变量的内容,四个变量类型默认为str
a = input("输入第一个数字:")
b = input("输入第一个数字:")
c = input("输入第一个数字:")
d = input("输入第一个数字:")
a = int(a)
b = int(b)
c = int(c)
d = int(d)#这里的就是把abcd四个变量转化为int类型
e = (a + b + c + d) / 4
print(f"The average value of a、b、c、d is {e}")# 这些数字都是我自己输入的
# 输入第一个数字:1
# 输入第一个数字:4
# 输入第一个数字:7
# 输入第一个数字:9
# The average value of a、b、c、d is 5.25
五、运算符
1.算数运算符
python的算数运算符与C语言比较类似,但也有一定的区别。
符号 | + | - | * | ** | / | // |
职能 | 加法 | 减法 | 乘法 | 乘方 | 小数除法 | 整数除法 |
a = 5 % 2
print(a)
b = 5 / 2
print(b)
c = 5 ** 2#表示计算5的平方
d = 4 ** 0.5#表示计算4的0.5次方,也就是开根号
# 乘方也支持小数
print(c)
print(d)#输出:
# 1
# 2.5
# 25
# 2.0
2.关系运算符
(1)整形的比较
关系运算符用于比较两个变量或表达式的值的大小,与C语言一致,=表示赋值,==表示相等。
符号 | > | < | >= | <= | != | == |
职能 | 大于 | 小于 | 大于等于 | 小于等于 | 不等于 | 等于 |
a = 10
b = 20
print(a > b)
print(a != b)
print(a <= b)
print(a == b)#输出:
#False
#True
#True
#False
(2)字符串的比较
除比较整数以外,这些符号也可以判断字符串的大小,字典序决定了字符串的大小。
在字符串进行比较时,会先比较两个字符串的第一个字符在字典中出现的顺序(abcd直到z,排在前面的小,排在后面的大)。如果两个字符串第一个字符相同,就再比较第二个,直到比出大小。
#例1:
s1 = "hello"
s2 = "world"
print(s1>s2)
#输出:False
#因为s1首个字母是h,s2首个字母是w,在字母表中w在h的后面,所以w更大,对应s2字符串更大#例2:
s1 = "hello"
s2 = "hallo"
print(s1>s2)
#输出True
#s1首个字母是h,s2首个字母也是h,字母相同,比较第二个字母
#s1第二个字母是e,s2第二个字母是a,在字母表中e在a的后面,所以e更大,对应s1字符串更大#例3:
s1 = "hello"
s2 = "hello"
print(s1 == s2)
#输出True
#s1首个字母是h,s2首个字母也是h,字母相同,比较第二个字母也相同,比到最后都是完全一致,相等#例4:
#字符串的比较只有在比较由英文字母组成的字符串才有意义
s1 = "你好"
s2 = "世界"
print(s1 > s2)
#这里虽然也会给出结果,但是这个结果没有意义
(3)浮点数的比较
python的浮点数比较较为特殊,以下列代码为例:
a = 0.1
b = 0.2
c = 0.3
#错误的方式
print(a + b == c)
#正确的方式
print(-0.000001<a + b - c<0.000001)#输出结果为True
#在数学运算中,0.1+0.2==0.3,但第一种判断a+b==c的时候却打印为False
#这是因为计算机中的大部分浮点数都是不能准确储存的,所以浮点数的比较都是考虑精度的。
#正确的比较方法是让两个数据相减,得到的差的范围足够小就可以看作相等
3.逻辑运算符
(1)逻辑运算符的种类
python中的逻辑运算符包括:and、or、not三个。
- and:左侧和右侧的表达式都为真整体才为真(例:你必须有车并且有房才能结婚,有车和有房缺一不可)
- or:左侧和右侧的表达式有一个为真整体才为真(例:你要么有车要么有房才能结婚,有车和有房有一个就行)
- not:右侧的表达式为真,整体为假;右侧的表达式为假,整体为真(例:你的对象必须不是外地人才能结婚,就是对方只要不是外地人就能结婚)
在python中是支持连续比较的,就不需要使用C语言的规则了,而且能用连续比较就不用and。
a = 1
b = 2
c = 3
print(a + b > c and a != b)
#a+b不大于c为假,a不等于b为真,有一个为假整体就为假,整体为假
print(a + b > c or a != b)
#a+b不大于c为假,a不等于b为真,有一个为真整体就为真,整体为假
print(not a != b)
#只要不满足a不等于b的条件这个表达式就为真,但此时a不等于b,整体为假#python的连续比较
print(a < b and b < c)
#可优化为:
print(a < b < c)
(2)and和or的短路求值
与C语言相同,python也具有同样的表达式和与或的处理逻辑。
如果and左侧的表达式已经为假,根据and有一个为假就为假的特点,那么整体表达式一定为假,此时and右侧的表达式不会计算。
如果or左侧的表达式已经为真,根据or有一个为真就为真的特点,那么整体表达式一定为真,此时or右侧的表达式也不会计算。
print(a == b and 10 / 0 == 1)#此时a不等于b,左侧表达式a==b已经为假,整体为假,后面的条件虽然有错误但是不会被判断
#输出:False
print(a != b or 10 / 0 == 1)#此时a不等于b,左侧表达式a!=b已经为真,整体为真,后面的条件虽然有错误但是也不会被判断
#输出:True
4.赋值运算符
python的赋值语句相比C语言更加丰富,包括链式赋值、多元赋值.复合赋值。
(1)链式赋值
#链式赋值
a = b = 10
#相当于下面两行的操作在一行完成了
# a = 10
# b = 10
(2)多元赋值
#多元赋值
a, b = 10, 20
#上面的行代码可替代下面两行代码
# a = 10
# b = 20#多元赋值方便了变量值的交换
#方法一:
s1 = "醋"
s2 = "酱油"
#此时我想把醋倒到酱油瓶里,酱油倒到醋瓶里
s3 = ""#定义一个空瓶
#把酱油倒到空瓶里
s3 = s2
#把醋倒到酱油瓶里
s2 = s1
#把空瓶中的酱油倒到醋瓶里
s1 = s3
print(s1)
print(s2)#通过多元赋值一行就可以搞定
a, b = b, a
#把a的值赋给b,把b的值赋给a
(3)复合赋值
注意python中不支持C语言中的++a和a++
#复合赋值
a = 0
a = a + 1
#表示把a+1的值赋给a
print(a)
#结果为1#上面的代码可以改写为
a = 0
a += 1
#a += 1与a = a + 1效果是相同的
print(a)
#结果也为1
六、选择语句
1.选择语句的写法
python中的选择语句与C语言中的用法是一致的,只是在写法上有所差别。
(1)单个if
满足if后面的条件就执行下面缩进的代码。
格式:
if+条件+冒号
四个空格或Tab键+需要执行的语句
a = 1
if a == 1:print("a的值为1")
a = 0
if a == 1:print("a的值为1")
(2)if与else
满足if后面的条件就执行下面缩进的代码,否则执行else下缩进的代码
格式:
if+条件+冒号
四个空格或Tab键+需要执行的语句
else+冒号
四个空格或Tab键+需要执行的语句
a = 0
if a == 1:print("a的值为1")
else:print("a的值不为1")
(3)if、elif与else
满足if后面或者elif的条件就执行下面缩进的代码,否则执行else下缩进的代码
格式:
if+条件+冒号
四个空格或Tab键+需要执行的语句
elif+条件+冒号
四个空格或Tab键+需要执行的语句
......
else+冒号
四个空格或Tab键+需要执行的语句
a = input("输入1表示好好学python,输入0表示不学:")
#注意默认返回的变量类型为str,得用str类型的字符串“1”比较
if a == "1":print("小伙子有前途")
elif a == "0":print("NND,不学是吧")
else:print("非法操作")
2.python的缩进和代码块
代码块指的是一组放在一起执行的代码,C语言使用{}实现代码块,而python中使用缩进表示代码块。
详见以下代码:
a = 1
if a == 1:print("aaa")print("bbb")
#这个程序满足a==1,会打印aaa和bbb#然后我们除去bbb的缩进,改a的值为0
a = 0
if a == 1:print("aaa")
print("bbb")
#此时不满足a==1,但是bbb也打印出来了
#所以说明python的条件判断语句下面只有缩进的语句才作为当前条件下的会被执行的语句#条件判断语句的下面一行一定要有缩进
a = 0
if a == 1:
print("aaa")
print("bbb")
#上面的if语句找不到该条件下需要执行的代码,所以会报错#这种缩进也可以嵌套
a = 1
b = 1
if a == 1:if b == 2:print("a")else:print("b")
else:print("c")
python的缩进可以嵌套以实现更复杂的控制,相同缩进的语句互相对应,即从上到下画一条线,在一条线上的代码是相互对应的。正是因为这样的语法,所以相比C/C++,python不适合太多的嵌套缩进。
3.空语句pass
pass表示空语句,只负责占位,不会执行任何代码。
#空语句用于补充条件指令下不需要执行代码的位置
a = 1
if a == 1:print(a)# 我想改变逻辑为a!=1时,打印a的值,我还不想改变if语句
a = 1
if a == 1:pass# 用一个空语句占位置,a==1时不会执行任何指令
else:print(a)
七、循环语句
1.while循环
python的算数运算符与C语言比较类似,但也有一定的区别。
格式:
while+条件+冒号
四个空格或Tab键+需要循环执行的语句
#实例
a == 1
while a<=10:print(a)a+=1#写一个死循环
a == 1
while a<=10:print(a)
死循环可以通过按左侧的红色方块停止(最左侧Run下面)
2.for循环
python的算数运算符与C语言比较类似,但也有一定的区别。
格式:
for+变量+in+range(数字,数字,数字)
四个空格或Tab键+需要循环执行的语句
其中,括号内的第一个数字表示变量的初始值,中间的数字表示变量不会超过这个数字,最后的数字表示步长,即每次循环变量的变化值。如果我们没有设置步长,那步长默认为1。
for i in range(1, 11):print(i)for i in range(1, 11, 2):print(i)for i in range(10, 0, -1):print(i)#输出:
#竖向打印12345678910
#竖向打印13579
#竖向打印10987654321
3.break与continue语句
python的break与continue语句与C语言是一致的。
在循环中只要遇到continue那么这次循环就直接中断,代码的执行回到头部,相当于continue以下的代码在本次循环中全部不执行了。
#有六个包子,我吃到第三个,发现里面有一只虫子,我就扔下这个包子接着吃剩下的包子
i = 1
while i <= 6:if i == 3:i += 1continueprint(f"我在吃第{i}个包子")i += 1# 输出:
# 我在吃第1个包子
# 我在吃第2个包子
# 我在吃第4个包子
# 我在吃第5个包子
# 我在吃第6个包子
在循环中遇到break就直接跳出循环了。
#有六个包子,我吃到第三个,发现里面有半只虫子,给我恶心坏了,啥也不想吃了
while i <= 6:if i == 3:breakprint(f"我在吃第{i}个包子")i += 1# 输出:
# 我在吃第1个包子
# 我在吃第2个包子