您的位置:首页 > 文旅 > 旅游 > 手撕Python之条件语句和循环语句

手撕Python之条件语句和循环语句

2024/12/23 5:02:40 来源:https://blog.csdn.net/2301_80863610/article/details/141778165  浏览:    关键词:手撕Python之条件语句和循环语句



1.比较运算符

2.判断

单条件判断,我们就需要用到if

程序的正常执行流程是从上往下依次执行

我们可以使用流程控制语句中的if语句来根据不同的情况执行不同的代码

单个条件的判断使用if关键字

两个条件使用if…else

多个条件使用if…elif…else

if关键字判断后面的条件,如果为真,就进行下面代码的编译

如果为假,那么就直接跳过这串代码运行后面的代码

格式:if 判断条件:

这里的格式一定要有冒号

然后直接换行

如果没有冒号的话,那么这个代码就是错的

我们在写下if条件语句后回车会出现一个缩进,大小为一个Tab键

然后我们就写下我们的代码

那么我们写下的这个代码就是属于这个if条件语句的

如果条件为真,那么我们就运行这个条件语句里面的代码

但是如果条件是假的话,那么我们就不运行这个代码

if条件语句的用法:

#输入用户名,判断用户名是否正确
name=input("请输入用户名")
if name=="huyunkai":print("输入正确")

上面的if是条件成立的情况

那么如果不成立呢?

那我们就用else

加上els:

#输入用户名,判断用户名是否正确
name=input("请输入用户名")
if name=="huyunkai":print("输入正确")
else:print("输入错误")

如果我们的条件不满足的话,那么编译器就会调用else里面的代码的

用户输入数学成绩,判断成绩是否及格(60分及以上为及格)

#用户输入数学成绩,判断成绩是否及格(60分及以上为及格)
score=eval(input("请输入成绩"))#我们不能直接将我们输入的变量拿来比较,我们需要进行类型转换的操作
if score>=60:print("成绩及格")#判断条件成立时执行的代码
else:print("成绩不及格")#判断条件不成立时执行的代码

当我们遇到多条件判断的时候

那么我们就要用到elif

这个elif是可以出现多个的

多种情况之下的写法:

#判断时有多个情况,那么我们就会使用到elif
#只要if的条件为真的话,那么我们就不会执行后面的条件语句的
score=eval(input("请输入你的成绩"))
if 90<=score<=100:print("成绩优秀")
elif 80<=score<=89:print("成绩良好")
elif 70<=score<=79:print("成绩中等")
elif 60<=score<=69:print("成绩及格")
else :print("成绩不及格")

3.三目运算

格式:表达式1 if 条件表达式 else 表达式2

作用:当条件表达式成立,返回结果是表达式1

否则返回结果就是表达式2

三目运算可以想成是 if else的缩写

就是将条件内的代码放到前面和后面

效果是一样的

三目运算的使用:

name=input("请输入用户名")
code =input("请输入密码")#表达式  if name=="huyunkai"and code=="1234" else  表达式
print("登录成功") if name=="huyunkai"and code=="1234" else print("登录失败")

我们是可以先写判断的条件

再在这个条件的前后将判断后的代码写上

3 if 3>2 else2

4.逻辑运算

逻辑与 and

两个条件都得为真才会返回真

如果第一个条件为假的话,那么这个直接返回假,就不会进行后面真假的判断了

and的使用:

#编辑模式
print(True and False)
print(True and True)
print(False and True)
#交互模式
False
True
False

第一个判断是假的的话,那么直接返回假,不用判断后面的

如果两个都是真的话,那么都是真

如果两个判断有一个是假的,那么总体的话就是假的

逻辑或 or

两个条件中有一个成立的,那么结果就是True

如果两个条件都不成立,那么结果就是False

逻辑或的使用:

#编辑模式
print(True or False)
print(True or True)
print(False or True)
print(False or False)
#交互模式
True
True
True
False

逻辑非not

not主要用于进行取反的

逻辑非进行取反:

#编辑模式
print(not False)
print(not True)
#交互模式
True
False

逻辑短路

逻辑运算过程中,如果已经能够得到最后的值,则不会再进行后面的判断,这个称为逻辑短路

在存在逻辑或or的语句中

我们仅仅判断了第一个表达式,但是or后面的第二个表达式我们并未进行判断,但是此时我们已经将结果进行了返回了

那么这种情况就是逻辑短板了

逻辑短板的情况概述:

a=1
print(a<2 or b>2)
#我们这里是没有定义b的,但是我们在程序运行的时候没有进行报错#我们这里用的是逻辑或or
#执行的顺序是从左边到右边
#先判断的是a<2  那么带入a就是成立的
#那么or就不会去执行b>2print(a<2 and b>2)
#这里就会报错了,说b没有进行定义

回顾题目

100-90优秀

89-80良好

79-70中等

69-60及格

60-0不及格

##判断时有多个情况,那么我们就会使用到elif
##只要if的条件为真的话,那么我们就不会执行后面的条件语句的
score=eval(input("请输入你的成绩"))
if score>=90 and score<=100:print("成绩优秀")
elif score>=80 and score<=89:print("成绩良好")
elif score>=70 and score<=79:print("成绩中等")
elif score>=60 and score<=69:print("成绩及格")
else :print("成绩不及格")

登录问题

1.输入用户名、密码

2.判断用户名、密码是否正确

正确:登录成功

不正确:提示用户名或者密码输入错误

#登录操作
'''
1.输入用户名、密码
2.判断用户名、密码是否正确正确:登录成功不正确:提示用户名或者密码输入错误
'''name=input("请输入用户名")
code =input("请输入密码")
if name=="huhu" and code=="123456":print("登录成功")
else:print("登录失败")

5.if嵌套

就是外层if内的代码还有层if

#先判断用户名,再判断密码
name=input("请输入用户名")
code =input("请输入密码")
if name=="xiaoming":if code=="1234":print("登录成功")else:print("密码输入错误")
else:print("用户名输入错误")

通过这种方式我们能知道是用户名错误还是密码错误

if嵌套一般适用于满足某个情况下又要进行另外一种情况的判断

注意:每个if和else是要进行对应的

尽量不要嵌套太深了

因为可能我们考虑不齐全

有些条件没写到位

男女赛跑题目:

#男女分组赛跑
#男子小于10秒进决赛,女子小于15进决赛
sex=input("请输入性别")if sex=="女":print("女子组")time=eval(input("请输入赛跑时间"))if time<15:print("进入决赛")else:print("没有进入决赛")
elif sex=="男":print("男子组")time=eval(input("请输入赛跑时间"))if time<10:print("进入决赛")else:print("没有进入决赛")
else:print("信息错误")
#除了if嵌套,我们还能使用if和and进行判断

6.while循环

while 循环条件

语句(循环条件成立时执行)

重复执行某一个函数

while 的使用和 if 类似,

判断为真的时候则运行缩进里面的代码,

判断式为假时则停止循环

赋值运算符(算术运算符+赋值符):+=、-=、*=、=、\=

作用:将左右两边的内容,进行指定的算术运算,将结果赋值给左边的变量

输出一到10的数字:

#输出一到10的数字
n=1
while n<11:print(n)n+=1

输出1到10之间的偶数:

#输出1到10之间的偶数
n=2
while n<=10:print(n)n+=2

累加1-10之间的数字和:

#累加1-10之间的数字和
sum=0#用于累加每次循环n的值
n=1
while n<=10:sum+=nn+=1
print(sum)

while循环后面也可以接上else循环,当循环正常结束的时候,就会执行else内的代码

else在while循环内的操作:

a=1
while a<5:print(a)a+=1
else:print("循环结束")

7.break和continue

break

用户登录,用户名和密码错误有三次机会:

#用户登录,用户名和密码错误有三次机会
c=1
while c<=3:name=input("请输入用户名")pw=input("请输入登录密码")if name=="huyunkai" and pw=="123456":print("登录成功")else:print("用户名或者密码输入错误")c+=1

在我们这个登录题目中

我们输入正确的密码和账号

我们还是要继续进行输入的操作

所以我们需要在输入正确的用户名和密码之后我们需要跳出这个循环

这个时候我们就需要使用到break了

break具有很强的破坏力,它的作用是直接停止当前所在的循环

while 后面也可以直接跟上True,但是内部就必须要使用break来终止循环。

使用break终止的循环,是不会执行else的内容。

有break的版本:

#用户登录,用户名和密码错误有三次机会
c=1
while c<=3:name=input("请输入用户名")pw=input("请输入登录密码")if name=="huyunkai" and pw=="123456":print("登录成功")break#登录成功直接跳出了,break的位置一定要放在语句后面else:print("用户名或者密码输入错误")c+=1

break只能在循环里面进行使用

continue

continue语句的作用是终止本次循环,并跳过循环体中continue后面的语句,回到循环的顶端,继续执行下一次循环。

使用continue跳过本次循环,在循环正常执行完毕后依然执行else的内容

仅仅只是跳过某一次循环

跳过此次循环,此次循环的后面 的代码不进行编译

continue的使用:

#continue ----跳过一次循环,开始下一次循环#输出1到10之间的偶数
n=1
while n<=10:if n%2!=0:continueprint(n)n+=1#这样写代码是死循环的
'''
因为我们一开始n=1
那么满足这个if条件的雨具,单后就直接continue了
然后就不进行后面的n+=1了
然后进行下一次循环,这次n还是1
那么结果就是和上次的是一样的结果
那么为了避免死循环的话,我们需要将n+=1放在continue的前面
'''
#正确写法:
n=1
while n<=10:if n%2!=0:n+=1  #一定要添加,不然就是死循环了continueprint(n)n+=1

8.for循环

基本格式1:遍历对象

for 变量 in 序列:

代码

格式2:使用range函数控制循环次数

for 变量 in range():

序列:字符串、列表、元组

目前我们只接触到了字符串

方法一:

for循环中的变量:可以不提前进行定义,后面会将遍历的值赋值给变量

第一种格式

#遍历:从序列中依次拿取数据,每次循环回拿一个,拿完了循环就结束了
for i in "python":#对这个字符串进行遍历#从字符串里面拿字符依次进行遍历print(i)#每次循环都是从字符串里面拿取一个字符
#基本格式就是 for  变量  in  序列#我们这里的变量是可以直接在这里进行定义的#可以不像之前那样非要赋值了才能用

依次从序列中拿取,每次拿一个元素

直到整个序列内都拿完了就停止循环了

for else

只要程序正常执行就能运行else中的代码

 

9.range

for循环中的range的使用方法:

for 变量 in range():

在这个range函数里面有三个参数

开始的数字、结束的数字、步长

对于开始数字的话,我们不进行设置的话默认值是0,

步长的默认值为1

我们循环是不包含结束值的

这个for循环的范围就是[开始数字,结束数字)

左边是闭区间,右边是开区间的

range函数的基本使用方式:

#方法二:使用range函数控制循环的次数
'''
for 变量  in  range():
'''#在这个range函数里面有三个参数
#开始的数字、结束的数字、步长
#对于开始数字的话,我们不进行设置的话默认值是0,for i in range(5):print(i)#我们在这里的range后面的函数没有写另外两个参数,但是没有进行报错
#为什么呢?
#因为开始的默认值为0,步长默认值为1
#那么这里的range(5)等价于range(0,5,1)的#意思就是从0开始,到5结束,每次增加步长,就是每次循环就增加1#对于我们上面的代码,仅仅是打印0-4,并没有进行5的打印
#为什么呢?
'''
因为对于range函数来说,我们的结束值是不包括在内的
那么打印的区间范围就是[0,5)
如果我们想输入0-5的数字,那么我们就需要将结束值改成6
那么编译器就会依次打印0-5的数字了
'''
for i in range(1,11,1):print(i)
#那么这里的话就能输出1-10的数字了#可以与while进行比较,可以发现for循环比while更加简单一些

可以与while进行比较,可以发现for循环比while更加简单一些

输出1-10之间的偶数:

for i in range(2,11,2):print(i)print("********")

累计1-10之间的数字:

sum=0#累加的和
for i in range (1,11,1):sum+=i
print(sum)

我们在循环的时候,如果是正常运行的话是会运行这个循环后面的else代码的

a=1
while a<5:print(a)a+=1
else:print("循环结束")

不管是while循环还是for循环都是这样的

除非是非正常循环,比如说满足一个条件就break了

这就是不正常循环的例子

但是如果是continue的话,那么这个循环仍然是正常循环的

else仍然能正常运行

#当循环正常结束的时候,回执行else部分
for i in range(1,6):print(f"吃第{i}个苹果")
else:print("吃完了")
''''''
#5个苹果,吃了3个苹果就饱了for i in range(1,6):print(f"吃第{i}个苹果")if i==3:break
else:print("吃完了")'''   '''
当循环正常结束的时候,回执行else部分
但是当我们通过break跳出循环过后是不会进行else循环的
这个break是强制解除掉的回想之前的用户名密码登录的问题
如果我们输入了三次密码之后还是错的,那么我们直接就进入else直接锁定账户
之前的是我们输入密码正确后我们直接break了,那么就是非正常结束循环break结束的循环是不会执行else部分
'''
'''
#5个苹果,第四个坏了,不能吃
for i in range(1,6):if i==4:continueprint(f"吃第{i}个苹果")   
else:print("吃完了")
#那么对于现在这个代码的话,当i=4的时候我们是不进行当前循环的进行的,直接跳出进行下一次循环
#continue跳过当次循环,进行下一次循环,仍然是正常的循环的,会执行else的操作'''

10.循环嵌套

for i in range(1,4):print(f"第{i}天写作业")print("第1页")print("第2页")print("第3页")print("第4页")print("第5页")
'''
#对于后面的页数,我们是可以利用循环嵌套以及格式化的方式将这个缩写出来的
for i in range(1,4):print(f"第{i}天写作业")for n in range(1,6):       print(f"第{n}页")#那么这个循环嵌套就能达到我们要的效果了'''
对于这个代码的话
当i=1的时候,n的大小是从1-5一直在变化
当内循环遍历完之后,然后i变成2,重复之前的过程的
外部循环执行一遍,内部循环执行n遍
'''

假设外层循环是i次,内层循j次

那么每进行一次外层循环,那么就会进行j内层循环

只有每一个外层循环里面循环了j次,i才会++,进行下一次的外循环

九九乘法表:

for i in range(1,10):for j in range(1,i+1):#让j的大小随着i的变化而变化print(f'{j}x{i}={i*j}',end="\t")#"\t是制表符"  这里空格也是可以的,但是会导致列数对不齐了print("\n")    #每一个外层循环结束的时候我们就进行换行的操作,手动换行
#手动换行,要在新的一行进行内容输出,要在新的一行进行输出#\t能保证每一次内循环打印的内容都在同一行
#然后进行完i次内循环之后我们就进行一个整体的换行,就是我们在外循环和内循环中间加的换行操作#加了\t之后,我们每个打印完成之后的式子之间的距离就是一个Tab键的距离,会对齐就好一点

效果图:

每个班有5名学生,有语数外三科,外部输入每个学生每科的成绩

分别求出每个学生三科成绩的平均值(保留两位小数)

s1=eval(input("请输入成绩1"))
s2=eval(input("请输入成绩2"))
s3=eval(input("请输入成绩3"))avg=(s1+s2+s3)/3#求平均值
print(f'平均值为{avg:.2f}')

现在我们通过代码实现了一个学生的平均值的操作

但是我们还要实现4个学生,那么我们就需要进行循环操作

for i in range(1,6):sum=0svg=0print(f"第{i}个学生的成绩的录入")for j in range(1,4):s=eval(input(f"请输入成绩{j}:"))sum+=savg=sum/3#每进行完3次内部循环我们就进行平均值的计算print(f'平均值为{avg:.2f}')
#sum在内部循环和外部循环之间定义的原因
'''
每进行完一次外部循环,那么这个sum就进行清零
然后重新计算另一个学生的值
这个avg也是一样的
'''

11.random模块

具体作用----随机模块

生成随机的内容

这个模块内的方法:

randint()---生成随机n-m之间的随机整数

我们如果想使用某一个模块

我们需要通过import 将这个模块拿到导入到当前pyhton文件中

之前的我们在变量那一章节,我们导入的是关键字

那么import就是导入模块的关键字

import 导入模块的名称

模块中的方法使用:模块名.方法名()

import random

random.randint(n,m)

这个就是生成n到m之间的数字

random模块里面的随机生成整数的方法的具体使用:

import random
num=random.randint(1,10)
print(num)

实现猜数字游戏

#猜数字游戏,电脑随机生成1-10的数字,用户进行猜测
#有5次机会
'''
电脑生成数字----random.randint()   --我们通过这个模块实现
用户猜测1.使用input输入用户的猜测2.我们要判断这个猜测是不是对的1.正确(第一次就猜对了,我们就不用继续猜了,使用break结束循环)2.不正确(我们给出提示)1.猜大了2.猜小了
'''
#现在实现的是单次的
print("---猜数字游戏(1-10)---")import random
cp_num=random.randint(1,10)
print(cp_num)
for i in range(1,6):user_num=eval(input("请输入你猜的数字:"))if cp_num==user_num:print("恭喜你,猜对了")print("游戏结束")breakelif cp_num<user_num:print(f"你猜的数字大了,你还有{5-i}次机会")continueelse :print(f"你猜的数字小了,你还有{5-i}次机会")continue
else:print("游戏结束")

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com