顺序语句
默认情况下,Python 的代码执行顺序是按照从上到下的顺序,依次执行的
print("1")
print("2")
print("3")
执行结果一定为 "1 2 3", 而不会出现"3 2 1"或者"1 3 2" 等,这种按照顺序执行的代码,我们称为顺序语句
这个顺序是很关键的,编程是一件明确无歧义的事情,安排好任务的顺序,计算机才能够正确的进行执行
就好像人生的顺序,是上学,工作,结婚,生子,一旦这里的顺序乱了,就很麻烦
条件语句
什么是条件语句
条件语句能够表达 "如果 ... 否则 ..." 这样的语义,这构成了计算机中基础的逻辑判定
条件语句
也叫做分支语句,表示了接下来的逻辑可能有几种
一个典型的例子:
如果丘处机没有路过牛家村
-
那么金兵不会死在郭、杨两家手上
-
郭、杨两家就不会流亡北方
-
郭夫人就不会去到大漠,完颜洪烈就不会遇到包惜弱
-
郭靖就不会和江南七怪救了铁木真
-
蒙古就不会统一
-
蒙古铁骑就不会西征
-
欧洲就不会出现火药,也就不会出现文艺复兴, 大航海.
-
大炮就不会从欧洲传到日本,日本得不到统一
-
完颜洪烈就不会全力战,金国内乱
-
宋朝不会灭亡,并诞生出资本主义,中国成为最发达的国家
如果 我认真敲代码 我就很容易找到工作
否则 我就容易毕业就失业
其中 "我认真敲代码" 称为条件,如果条件成立(条件为真),则会出现 "我就很容易找到工作"这个情况。如果条件不成立(条件为假),则会出现 "我就容易毕业就失业"
当然,同样的逻辑,还可以反着表达
如果 我选择躺平摆烂 我就容易毕业就失业
否则 我就很容易找到工作
虽然结构变了,但是整体表达的语义是等价的。
PS: 亲爱的同学们,你们是选择认真敲代码,还是躺平摆烂呢?
语法格式
Python 中使用 if else 关键字表示条件语句
(1) if
if expression:
do_something1
do_something2
如果 expression 值为 True,则执行 do_something1,do_something2, next_something
如果 expression 值为 False,则只执行 next_something,不执行 do_something1, do_something2next_something
(2) if - else
if expression:
do_something1
else:
do_something2
如果 expression 值为 True,则执行 do_something1
如果 expression 值为 False, 则执行 do_something2
(3) if - elif - else
if expression1:
do_something1
elif expression2:
do_something2
else:
do_something3
如果 expression1 值为 True,则执行 do_something1
如果 expression1 值为 False,并且 expression2 为 True 则执行 do_something2
如果 expression1 值为 False,并且 expression2 为 False 则执行 do_something3
注意:Python中的条件语句写法,和很多编程语言不太一样
1.if 后面的条件表达式,没有 ( ),使用:作为结尾.
2.if / else 命中条件后要执行的 "语句块",使用缩进 (通常是 4 个空格或者 1 个 tab)来表示,而不是
{ }
3.对于多条件分支,不是写作 else if,而是 elif (合体了)
示例:输入 1 表示愿意认真学习,输入 2 表示躺平摆烂
choice = input("输入 1 表示认真学习,输入 2 表示躺平摆烂:")
if choice == "1" 注意这里要比较的是字符串1,而不是整数1。
print("你会找到好工作!")
elif choice == "2"
print("你可能毕业就失业了!")
else
print("你的输入有误!")
缩进和代码块
代码块指的是一组放在一起执行的代码
在 Python 中使用缩进表示代码块,不同级别的缩进,程序的执行效果是不同的
代码1
a = input("请输入一个整数: ")
if a == "1":
print("hello")
print("world")
代码2
a = input("请输入一个整数: ")
if a == "1"
print("hello")
print("world")
这样的代码都是属于并不正确的代码。在Python中,缩进表示代码块,在if、else、elif、while、for......需要跟上代码块的部分,都是需要使用缩进来表示的。
这样写会提示缩进块出现问题,Python中缩进是非常重要的,也不是随便乱写的。
注意上述代码的区别
在代码1 中,print("world") 有一级缩进,这个语句属于 if 内的代码块,意味着条件成立,才执行, 条件不成立,则不执行
在代码2 中,print("world") 没有缩进,这个语句是 if 外部的代码,不属于 if 内部的代码块,意味着条件无论是否成立,都会执行
另外,Python中的代码块还可以嵌套
a = input("请输入第一个整数: ")
b = input("请输入第二个整数: ")
if a == "1"
if b == "2":
print("hello")
print("world")
print("python")
在这个代码中,print("hello") 具有两级缩进,属于 if b == "2" 条件成立的代码块,print("world") 具有一级缩进,属于 if a == "1" 条件成立的代码块,print("python") 没有缩进,无论上述两个条件是否成立,该语句都会执行
基于缩进的方式表示代码块,带来的好处就是强制要求程序猿要写明确的缩进,来明确代码之间的相对关系,如果缩进书写的不对,则直接报错。像 C++ / Java 这些语言,即使完全不写缩进,语法也不会报错,代码可读性就比较差。当有多级条件嵌套的时候,当前的语句属于哪个代码块,完全取决于缩进的级别。
同时,带来的坏处就是,如果缩进层次比较多,就容易分不清楚某个语句属于哪个层级
if a == 1
if b == 2
if c == 3
if d == 4
if e == 5
if f == 6:
if g == 7
print("hello")
print("1")
print("2")
请问,上述代码中的 print("1") 和 print("2") 属于哪一级缩进?
因此,就有了 "写 Python 需要自备游标卡尺" 这个梗
练 习 ( 1 )
输入一个整数,判定是否是奇数
a = int( intput( "请输入一个整数:" ) )
if a % 2 == 0:
print( "偶 数" )
else:
print( "奇数")
这个代码在C++和Java中是不行的,-19 % 2 == -1,和1是不相等的,在python中,-19 % 2 == 1,因此这个代码是可以的。
Python 的取模运算遵循"结果与除数符号相同"的原则,-19 % -2 == -1,int ()转换是默认按照十进制的方式来解析的。
( 2 ) 输入一个整数,判定是正数还是负数
a = int(input("请输入一个整数:"))
if a < 0:
print("负数")
elif a > 0:
print("正数")
else:
print("0")
( 3 ) 判定年份是否是闰年
a = int(input("请输入一个整数:"))
if a % 100 == 0:
判 定 世 纪 闰 年
if a % 400 == 0:
print("闰年")
else:
print("平年")
else:
判定普通闰年
if a % 4 == 0:
print("闰年")
else:
print("平年")
空语句 pass
代码示例:输入一个数字,如果数字为 1,则打印 hello
a = int(input("请输入一个整数:"))
if a == 1:
print("hello")
这个代码也可以等价写成
a = int(input("请输入一个整数:"))
if a != 1:
pass
else:
print("hello")
a = int(input("请输入一个整数:"))
if a != 1:
else:
print("hello")
在Python中,对代码要求还是比较严格的,虽然希望条件满足的时候,啥也不做,但是由于Python对于语法格式尤其是缩进和代码块要求比较高,如果啥都不写,是不符合语法要求的。这种情况下,可以使用空语句进行占位,空语句就是pass,没有实在的意义。
很多语句都是如此,虽然我们啥都不想做,但是也得写个 pass 空语句来占位,否则就会破坏Python原来的语法结构。
其中 pass 表示空语句,并不会对程序的执行有任何影响,只是占个位置,保持 Python 语法格式符合要求
循环语句
有些操作是需要反复执行的,这种就需要使用循环
while 循环基本语法格式
while 条件:
循环体
条件为真,则执行循环体代码,条件为假,则结束循环
1.循环变量的初始值
2.循环的判定条件
3.循环变量的更新语句
代码示例:打印 1 - 1 0 的整数
num = 1
while num 10:
print(num)
num += 1
代码示例 : 计算 1 - 100 的和
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(sum)
代码示例:计算 5 的阶乘
num = 1
sum = 0
while num <= 5:
factorResult = 1
i = 1
while i <= num:
factorResult *= i
i += 1
sum += factorResult
num += 1
print(sum)
这个程序用到了两重循环,也就是在循环语句中也可以套循环
for 循环
基本语法格式
for 循环变量 in 可迭代对象:
循环体
注意:python 的 for 和其他语言不同,没有 "初始化语句","循环条件判定语句","循环变量更新语句",而是更加简单
所谓的 "可迭代对象",指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量"
代码示例:打印 1-10
for i in range(1, 11):
print(i)
使用 range 函数,能够生成一个可迭代对象,生成的范围是 [1, 11),也就是 [1, 10]
代码示例:打印 2, 4, 6, 8, 10
for i in range(2, 12, 2):
print(i)
通过 range 的第三个参数,可以指定迭代时候的 "步长",也就是一次让循环变量加几,range是一个内建函数,起到的效果就是得到一个可迭代对象,这个可迭代对象就包含了一系列的整数。
range(beg,end)等价于[beg,end),range还提供了第三个参数,表示"步长",默认的步长是1。
代码示例:打印 10-1
for i in range(10, 0, -1):
print(i)
range 的步长也可以设定成负数
代码示例:求 1 - 100 的和
sum = 0
for i in range(1, 101):
sum += i
print(sum)
这个sum下面会出现一个黄色的波浪线,是因为当前有个内建函数sum,咱们自己定义的变量和内建函数冲突了,虽然不影响运行,但是代码后面就无法使用内建函数sum。
使用Shift + F6可以针对变量进行重命名,会智能的分析咱们的代码,自动把所有需要修改的名字都统一替换了。
continue
continue 表示结束这次循环,进入下次循环
代码示例:模拟吃包子,吃第 3 个包子的时候吃出了一只虫
for i in range(1, 6):
if i == 3:
continue
print(f"吃完第 {i} 个包子")
break
break 表示结束整个循环
代码示例:模拟吃包子,吃第 3 个包子的时候吃出了半只虫
for i in range(1, 6):
if i == 3:
break
print(f"吃完第{i}个包子")
代码示例:输入若干个数字,求平均值,使用 "分号" 作为结尾
sum = 0
count = 0
while True:
num = input("请输入数字:")
if num == ';':
break
num = float(num)
sum += num
count += 1
print(sum / count)