python:条件控制语句
- 1、input语句
- 2、if语句
-
- 2.1、if简介
- 2.2、if-elif-else
- 2.3、 if-elif-elif
- 3、while循环
-
- 3.1、while简介
- 3.2、while循环的三大要素
- 3.3、while语法
- 3.4、while循环嵌套
- 3.4、退出循环
-
- 3.4.1 break用法
- 3.4.2 continue用法
- 3.4.2 无限循环
- 4、对运算符优先级的补充
- 5、课后作业
-
- 1、打印乘法口诀表
- 2、求1000以内所有的水仙花数
- 3、获取用户输入的任意数,判断其是否是质数?
- 4、猜拳游戏
- 5、附加(个人练习)
- 旺仔心得:
文章图片
1、input语句
input简介:
input()方法暂停程序等待用户输入,获取输入并赋给一个变量。
input接受的参数都是字符串
input会阻塞后面的程序
- 实际运用:
a = input('请输入:')
print('您输入的值为:{}'.format(a))
- 运行结果:
首先会出现:
文章图片
然后输入值,‘i love python’,得到:
文章图片
- 需注意:
【5、python条件控制语句——旺仔】?input
输入的值都是字符串,因为python
是一种强文本语言,不像php
之类的语言在使用运算符比较时可以强制转换类型,再进行比较,所以若想要得到其他类型的值,则需要使用例如int()
和eval()
之类函数进行转换。
- 例如如下代码:
a = input('请输入一个数值:')
print(type(a))
if a == 1:
print('123')
else:
print('abc')
- 运行结果会如下,字符串‘1’与数值1直接比较,不会像php中一样直接强行转换后比较得到True
文章图片
- if 判断语句的基本语法:
if 要判断的条件: 条件成立时,要做的事情
- 注意:
? 代码的缩进为一个 tab 键,或者四个空格(pycharm 自动帮我们增加) 在 python 开发中,Tab 和空格不要混用,这里一定要注意tab的使用,很多初学者都会再这里犯错,然后找到问题,然后报错,像这样:IndentationError: unindent does not match any outer indentation level缩进错误:未缩进与任何外部缩进级别都不匹配,还有一定一定不要忘记加上 :,不加也会报错的。
- 语法如下:
if 判断条件1:
pass
elif 判断条件2:
pass
else:
pass
- 特点:
永远会执行且只有一个输出
- 语法如下:
if 判断条件1:
pass
elif 判断条件2:
pass
elif 判断条件3:
pass
- 特点:
不一定会执行,但是一旦执行,就只会有一个输出
- while在英语中的解释是:当…时候。
- Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
- 初始值
- 对于初始值的判断
- 初始值的自增长
- 当表达式为True的时候,程序会一直执行循环体代码,直至表达式为False。
while 表达式:
循环体
- while实际运用
i = 1
while i <= 10:
print(i)
i+=1
演示效果:3.4、while循环嵌套
文章图片
? 外层循环的初始值要放到外层循环外,内层循环的初始值一定要放到外层循环之内、内层循环之外,否则内层循环的初始值不会重新被赋值,就没法控制内层循环的循环次数实际运用:
# 乘法口诀打印,详情请看课后作业题1,
i = 1
while i < 10:
j = 1
while j <= i:
m = i * j
print(f'{i}x{j}={m}',end='')
j += 1
print()
i += 1
3.4、退出循环
为什么要退出循环,这是很多人第一的想法,这里我们需要了解一个知识——死循环。永远停不下来的循环,叫做死循环。3.4.1 break用法
死循环的标准格式:while True:循环体
? 可以简单的这样理解:for
循环主要用于那些我们知道循环次数的循环,而while
循环主要用于那些我们不知道具体循环多少次的循环,但是因为有些时候,我们根本不知道循环要何时结束,所以只能使用while
。
? 当然,有些循环用for和while都可以实现。
? 其实,你经常用到的一些程序就包含着while
循环。例如,游戏程序就在一个大的while循环中,在玩家退出时停止运行。用while循环能让程序在用户没有让它停止之前一直运行,这点是for循环做不到的。
? 所以在这里,退出循环就十分重要。可使用的有break
和continue
,接下来,我们将详细介绍他们的使用方法。
- break 用于跳出当前循环
当要立即退出while
循环,不在运行循环体中余下的代码,也不管while
后面跟的表达式是真是假,可以使用break
语句。 - 实际用法,这里运用
判断输入的数是不是质数
,进行演示
# 判断一个数是不是质数
a = int(input('请输入一个自然数:'))
i = 2
while i
运行结果:(这里使用29及5491来运行)
文章图片
文章图片
运用讲解:3.4.2 continue用法
? 这里因为要用到的自然数是用户自己输入的,所以在代码运行前根本不知道需要循环多少次,所以使用while
循环,然后我们只需要判断这个数是不是质数,所以只需要将数值a被从2到a-1的数都除一遍,只要再其中有一步可以的余数是0,就可以判断其不是质数,既可以不用再接着运行,这时就可以使用break强制退出,break之后的代码将不在运行。
- continue跳出当前循环的剩余语句,进行下一轮循环
注意:continue
和break
的区别在于,前者跳出当前(本次)循环,而后者跳出整个循环。二者既可用于while也可用于for。 - 实际用法,这里运用
打印比输入的数小的所有奇数
,进行演示
# 打印比输入的数小的所有奇数
a = int(input('请输入一个数值:'))
i = 0
while i < a:
i += 1
if i % 2 == 0:
continue
print(i)
运行结果:(这里使用19来运行)
文章图片
运用讲解:这里其实跟break大体上是用法差不多,因为要打印所有的比输入的数小的奇数,所以在这里只用弹出本次循环即可,如果这里使用break,将只会得到一个值1。3.4.2 无限循环
- 这里一定要提一下这个点,因为很多人都会遗忘这个点,包括我在刚学的时候也经常忘记,就是在写
while循环
的时候,忘记给判断条件中的循环变量进行递增或递减的操作,而导致把循环语句写成无限循环
例如:(像如下这样这些就不会有任何问题)
a = 1
while a <= 5:
print(a)
a += 1
但是像下面这样没有写a+=1,a的值就会一直是1,然后就会使循环无限运行
a = 1
while a <= 5:
print(a)
4、对运算符优先级的补充
运算符说明 | Python运算符 | 优先级 | 结合性 | 优先级顺序 |
---|---|---|---|---|
小括号 | () | 19 | 无 | 高 |
索引运算符 | x[i] 或x[i1: i2 [:i3] | 18 | 左 | ↑ |
属性访问 | x.attribute | 17 | 左 | ↑ |
乘方 | ** | 16 | 左 | ↑ |
按位取反 | ~ | 15 | 右 | ↑ |
符号运算符 | + (正号)、- (负号) | 14 | 右 | ↑ |
乘除 | *、/、//. % | 13 | 左 | ↑ |
加减 | +、- | 12 | 左 | ↑ |
位移 | >>、<< | 11 | 左 | ↑ |
按位与 | & | 10 | 右 | ↑ |
按位异或 | ^ | 9 | 左 | ↑ |
按位或 | | | 8 | 左 | ↑ |
比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 | ↑ |
is 运算符 | is、is not | 6 | 左 | ↑ |
in运算符 | in、not in | 5 | 左 | ↑ |
逻辑非 | not | 4 | 右 | ↑ |
逻辑与 | and | 3 | 左 | ↑ |
逻辑或 | or | 2 | 左 | ↑ |
逗号运算符 | exp1, exp2 | 1 | 左 | 低 |
文章图片
1、打印乘法口诀表
#乘法口诀表
# while正序
i=1
while i<=9:
j=1
while j<=i:
m = i*j
print(f'{i}x{j}={m}',end='')
j+=1
i+=1
print()# while逆序
i=9
while i>=1:
j=9
while j>=(10-i):
m = i*j
print(f'{i}x{j}={m}',end='')
j+=-1
i+=-1
print()
- 运行结果如下:
文章图片
- 知识点运用及编写思路:
?运用到2、求1000以内所有的水仙花数while循环语句,while循环嵌套,if语句,f-string站位符
。
?先另i=1,然后外循环每次循环i都递增1,总共循环9次,内循环前先另j=1,这样每次外循环,j的值都会被赋成1,然后使用while判断j ?如外循环第一次循环,i=1,则内循环就循环1次、外循环第二次循环,i=2,则内循环就循环2次,以此类推
。
?逆序的思路大体上差不多,就是在内循环的时候调整一下判断条件,使得内循环次数递减。
?如外循环第一次循环,i=1,则内循环就循环(10-i次)也就是9次、外循环第二次循环,i=2,则内循环就循环(10-i次)8次,以此类推
。
# 求1000以内所有的水仙花数
i = 100
sum='1000以内所有的水仙花数为:'
while i < 1000:
a = i//100
b = i % 100//10
c = i % 10
if i == a**3+b**3+c**3:
sum += ' {}'.format(i)
i += 1
print(sum)
- 运行结果如下:
文章图片
- 知识点运用及编写思路:
首先要知道什么事水仙花数:3、获取用户输入的任意数,判断其是否是质数?
?使用循环语句和
- 水仙花数又称阿姆斯特朗数。
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙花数共有3个:24678050,24678051,88593477if
语句的嵌套,运用while
让从100到1000的每一个数值都进行判断,将百位数,十位数,个位数都提取出来分别赋值a、b、c
,然后判断水仙花数,如果是水仙花数,则将其赋值添加给sum
,最后在所有的判断结束后输出sum
,得到三位数的水仙花数。
# 获取用户输入的任意数,判断其是否是质数?
while True:
num = int(input('请输入一个整数:'))
if num > 1:
break
else:
print('请输入一个大于1的整数:')
num = int(input('请输入一个数字:'))if num == 2 or num == 3:
print('您输入的数字{0}是质数'.format(num))
else:
i = 2
while i < num:
if num % i == 0:
print('您输入的数字{0}不是质数,可被{1}整除'.format(num,i))
break
else:
i += 1
if num == i:
print('您输入的数字{0}是质数'.format(num))
- 运行结果如下(这里分别选择了255与257进行测试):
文章图片
文章图片
- 知识点运用及编写思路:
? 运用while语句及if语句的嵌套,再这里,我为了输入的数更合理,所以先进行了判断,因为质数肯定都都是自然数,所以先判断用户输入的值是否大于等于1,是则继续,如果不是就提示用户重新输入。4、猜拳游戏
? 然后就是开始数值判断,首先如果用户输入2、3这2个数值,则肯定是质数,然后我们开始判断这个数是不是质数,所以只需要将数值a被从2到a-1的数都除一遍,只要再其中有一步可以的余数是0,就可以判断其不是质数,既可以不用再接着运行,直接输出改数不是质数,并输出其可被什么数整除。
? 否则一直到循环结束,如果i的值与用户输入的sum值相等,则可以输出此数值就是质数。
# 猜拳游戏:
# ? 出拳玩家:手动输入电脑:随机输入
# ? 判断输赢:玩家获胜电脑获胜平局
import random# 导入随机模块
A=["剪刀","石头","布"]
while True:
a=input("请输入代表数值(剪刀0 、石头1 、布2):")# 将输入的数据转化为整型
c=random.randint(0,2)# 随机一个0到2的整数
if a.isdigit() and a in ['0','1','2']:# 是否为数字,且在出拳数字内
a=int(a)# 转换为整型
if a==c:# 平局条件
print("平局 ",end='')
elif a-c==1 or c-a==2:# 赢局条件
print("玩家获胜 ",end='')
else:# 输局
print("电脑获胜 ",end='')
print("玩家出%s,电脑出%s" % (A[a], A[c]))# 显示出双方出拳
else:# 输入错误
print("玩家没正确出拳")
- 运行结果如下:
文章图片
- 知识点运用及编写思路:
5、附加(个人练习)? 这里我们运用的是randint(a,b),还运用了列表的索引,这里是关键,想了好久呢,最后就是if及while的嵌套,这里其实可以不用使用while循环的,但是因为每次运行都要重新操作,比较麻烦,所有加上了一个循环,然后input语句有阻断程序的作用,也不用担心会死循环。
- 这里首先要引入random 随机模块的知识点:
random.random():生成一个0-1之间的随机浮点数
random.randint(a,b):生成[a,b]之间的整数,包含a,b
random.uniform(a,b):生成[a,b]之间的浮点数
random.choice(sequence):从特定序列的中随机取一个元素,这里的序列可以是字符列表,元组等。
? 然后我们首先这里定义一个A的列表,并使A=["剪刀","石头","布"]
,这样A[0]=“剪刀”,A[1]=“石头”,A[2]=“布”,并使用randint随机模块,随机将0~2之间的任意一个数值复制给c。
? 之后就是判断的环节了,我们先判断一下用户输入的是不是我们想要的0、1、2之间的数字
,是的话就进行下一步判断,如果a==c,既用户与电脑的值一样,则是平局
,如果 a-c == 1 或者 c-a == 2中有一个成立,既用户赢
。
? 这里可能有一丝丝的小饶,且听我缓缓道来,举个例子:用户出的是石头,既a=1,电脑出剪刀,既c=0
,用户才可以赢,还有2种赢的情况就是,用户出步,既a=2,电脑出石头,既c=1
,以及用户出剪刀,既a=0,电脑出步,既c=2
。
? 在这里,就可以得到判断条件 a-c == 1 或者 c-a == 2中只要有一个成立,则用户就赢了,其他非平局的情况,都是电脑赢
。
- 注:以下的代码都是基于课后作业的个人练习及思考,这里就不做知识点及思路的讲解。请多多包涵
# 使用for循环打印乘法口诀表
# for正序
for i in range(1,10):
for j in range(1,i+1):
print(str(i)+"*"+str(j)+"="+str(i*j)+" ",end="")
print()# for逆序
for i in range(9,0,-1):
for j in range(i,0,-1):
print(str(i)+"*"+str(j)+"="+str(i*j)+" ",end="")
print()
# 输入月份得到季节
a = int(input('请输入月份:'))
if a == 3 or a == 4 or a == 5:
print('{0}月份为春季'.format(a))
elif a == 6 or a == 7 or a == 8:
print('{0}月份为夏季'.format(a))
elif a == 9 or a == 10 or a == 11:
print('{0}月份为秋季'.format(a))
elif a == 12 or a == 1 or a == 2:
print('{0}月份为冬季'.format(a))
# 求100以下的偶数之和
i = 1
sum = 0
while i <= 100:
if i%2 == 0:
sum += i
i += 1
print(sum)
文章图片
旺仔心得:
? 在学习的道路上,没有捷径可以走,只有投入时间去努力,才会有收获,这篇文章花了很长时间,包括在代码上的一些想法以及运用,也花了许久,但是当我每每一个问题想通时,那种愉悦感又使得整个人都为之振奋,怎么说呢,反正这种感觉很nice,还有满满的收获,感觉特别充实。 φ(゜▽゜*)?
文章图片
推荐阅读
- Python基础|jupyter notebook指定启动目录
- #|Python基础——强制类型转换及字符串
- #|Python基础——魔法方法与异常处理
- #|Python基础——类和对象与魔法方法
- python基础|[python基础] 面向对象——封装,继承
- Python爬虫|了解多线程并通过Python程序实现多线程解决资源竞争、死锁等问题【非常详细】
- #yyds干货盘点#return用法 - python基础学习系列(64)
- #yyds干货盘点#反转密码方法 - python基础学习系列(59)
- #yyds干货盘点#python基础学习系列