控制语句由条件语句,循环语句构成
条件语句是值根据条件表达式的的计算结果来控制程序流向不同的代码块,python中的条件语句有if 语句,if else 语句以及 if elif else 语句。
先介绍一下Python中的控制台输入函数input(), input()捕获用户的输入并将其转化为字符串,声明如下:
input([prompt]) -> string
msg = input("请输入你的幸运数字:")
print(type(msg))
请输入你的幸运数字:4
Process finished with exit code 0
如果输入的内容要以数字格式被运用,可以强制用int 或者float去转换。
x = input("请输入:")
print(type(x))
x += 1
print(x)
File "E:/leaningPython/task1.py", line 262, in
x += 1
TypeError: must be str, not int
Process finished with exit code 1
这里由于接收的x返回的是字符串格式,并不能用于计算,这里我用int去转化一下,然后输入数字之后即可用于计算
x = int(input("请输入:"))
print(type(x))
x += 1
print(x)
总结一下input()函数的特点:
• 该函数用来获取用户的输入
• input()调用后,程序会立即暂停,等待用户输入
• 用户输入完内容以后,点击回车程序才会继续向下执行,可以起到阻塞程序的作用
print("hello Python")
input()
print("hello world")
# 在打印出hello Python 之后,如果不输入内容,后面的语句不会被执行,程序处于等待状态
• 用户输入完成以后,其所输入的的内容会以返回值得形式返回
语法:
if(条件表达式):
代码块
执行的流程:
• if语句在执行时,会先对条件表达式进行求值判断,
• 如果为True,则执行if后的语句
• 如果为False,则不执行
强调一下缩进问题,同一个代码块中包含的代码保持着同一个缩进级别,所以要么都执行,要么不执行。
语法
if 条件表达式 :
代码块
else :
代码块
执行流程:
• if-else语句在执行时,先对if后的条件表达式进行求值判断
• 如果为True,则执行if后的代码块
• 如果为False,则执行else后的代码块
这里我觉得有必要在提一下之前的之前学习过的三元运算符
语句1 if 条件表达式 else 语句2
和if else条件语句的区别是三元运算符没有代码块(眼见的就是没有冒号),三元运算符有value返回(不是语句1的value 就是语句2的value)
if elif else语句是对if else语句的补充,当程序的条件分支很多的时候,可以使用该语句。
语法:
if 条件表达式 :
代码块
elif 条件表达式 :
代码块
elif 条件表达式 :
代码块
........
else :
代码块
执行流程:
• if-elif-else语句在执行时,会自上向下依次对条件表达式进行求值判断,
• 如果表达式的结果为True,则执行当前代码块,然后语句结束
• 如果表达式的结果为False,则继续向下判断,直到找到True为止
• 如果所有的表达式都是False,则执行else后的代码块
总结: if-elif-else中只会有一个代码块会执行
这里给大家演示一些示例代码,个人理解 if else 和if elif else的区别,在条件表达式区间定义明确的情况下其实这里没什么区别。
month = float(input("请输入现在的月份:"))
#这里是为了防止浮点型小数
if 1 <= month <= 12:
if 1 <= month <= 3:
print("你的春天到了!")
if 3 < month <= 6:
print("火辣辣的夏天来了!")
if 6 < month <= 9:
print("一叶落而至天下秋!")
if 9 < month <=12:
print("冰雪世界来了!")
else:
print("输入的月份不合法!")
month = float(input("请输入现在的月份:"))
#5这里是为了防止用户恶意输入浮点型小数,程序直接报错
if 1 <= month <= 12:
if 1 <= month <=3:
print("你的春天到了!")
elif 3 < month <= 6:
print("火辣辣的夏天来了!")
elif 6 < month <= 9:
print("一叶落而值天下秋!")
else:
print("冰雪世界来了!")
else:
print("输入的月份不合法!")
以上两段代码展现了在条件定义明确的情况下,逻辑上并不会有什么问题.
下面也举例说明一下,如果条件表达式定义的区间不够的情况下,会出现的问题
month = float(input("请输入现在的月份:"))
#这里是为了防止浮点型小数
if 1 <= month <= 12:
if month <= 3:
print("你的春天到了!")
elif month <= 6:
print("火辣辣的夏天来了!")
elif month <= 9:
print("一叶落而至天下秋!")
else:
print("冰雪世界来了!")
else:
print("输入的月份不合法!")
上面的代码的条件判断都是单向的,按照正常的输入和理解也不会有问题,但是如果输入的时候把if elif else语句中的判断顺序变了的话,可能会出现不合理的情况
if 1 <= month <= 12:
if month <= 3:
print("你的春天到了!")
elif month <= 9:
print("一叶落而至天下秋!")
elif month <= 6:
print("火辣辣的夏天来了!")
else:
print("冰雪世界来了!")
else:
print("输入的月份不合法!")
上述代码把秋天和夏天的判断顺序改变了,所以在输入月份为5的时候,直接输出“一叶落而知天下秋”。这里仅仅是为了解释条件定义不严谨可能会给程序逻辑造成的问题,可能一般情况下大家也不会出现这个问题。
上述的if 语句是可以嵌套使用的,嵌套语句有很多种写法,但是要注意把所有的分支情况都考虑在内,编写条件语句时最好避免使用嵌套语句,嵌套的层次多了可能自己都糊涂了,嵌套语句也不利于阅读理解,可能会漏掉可能性。语法上else子句都是可以省略的。
循环语句通俗来说就是重复执行一段代码块,通常用于遍历集合和累加计算,Python中主要用while循环,for循环。 i++, i-- (这种自增自减方式不被python支持)
语法:
while 条件表达式 :
代码块
else:
代码块
执行过程:
当条件表达式的值为True时,依次执行while代码块中的语句,直到条件表达式的值为False(就是整个while循环体执行完毕),则程序跳转到else语句,其中else子句可以省略。
while循环三要素:
在使用循环语句的时候,应该要注意条件表达式的布尔值,避免出现死循环的情况,例如
# i永远大于0,就会无限执行自增1操作
i = 0
while(i > 0):
print(i)
i += 1
对于while循环嵌套的理解就是在while的基础上添加了内部循环的条件判断
语法:
while 表达式1:
while 表达式2:
代码块2
代码块1
执行过程:
下面用代码演示一下,大家可以通过Debug的方式一步步执行,看条件变量的值的变化是怎么引导循环体的执行的。
# i 用于控制外层while循环的变量
i = 0
while i < 5:
# j 用于控制内层while循环的变量
j = 0
while (j <= i):
#这里要说明一下print函数自带换行功能,这里为了在一行连续输出*,所以end参数被重写了
print("*",end="")
# 变量 j 的自增,用于控制内层循环的执行次数
j += 1
print()
# 变量 i 的自增,用于控制外层循环的执行次数
i += 1
也可逆序输出,有兴趣的话可以自己玩玩。
i = 0
while(i < 5):
j = 0
while (j < 5 - i):
print("*", end="")
j += 1
print()
i += 1
至于For 循环的内容,以及break和continue怎么控制跳出循环语句,下篇文章再代码演示。
1 求1000以内所有的水仙花数
i = 10
while(i <= 1000):
j = 0
res = 0
#这边通过把数字转换为字符串得到目前是几位数
while(j < len(str(i))):
# print(str(i)[j],end=" ")
res += int(str(i)[j])**3
j += 1
# print("")
if(res == i):
print("%d是水仙花数" % i)
i += 1
输出结果:
E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
2 获取用户输入的任意数,判断其是否是质数?
num = int(input("请输入任意自然数:"))
if(num > 1):
j = 2
# 最开始在这个while循环的地方迷糊了,一定要记得while else的执行顺序,循环结束收才执行else..
# 并且 while 循环体内是自上而下依次执行,if 判断结束后就执行控制变量j的自增, 然后再次循环直到
# while 循环结束,然后执行else语句
while(j < num ):
if(num % j == 0):
print("%d不是质数" % num)
break
j += 1
else:
print("%d是质数" % num)
elif(num == 2):
print("%d是质数" % num)
else:
print("%d不是质数" % num)
E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
请输入任意自然数:47
47是质数
3 猜拳游戏:
• 出拳 玩家:手动输入 电脑:随机输入
• 判断输赢: 玩家获胜 电脑获胜 平局
player =int(input("请手动输入石头(0),剪刀(1),布(2):"))
print("player =", player)
computer = random.randrange(0,3)
print("computer",computer)
if(0<= player <3):
if(computer != player):
# print("需要仔细battle一下")
if(computer == 0):
if(player == 1):
print("电脑获胜")
else:
print("玩家获胜")
elif(computer == 1):
if(player == 0):
print("玩家获胜")
else:
print("电脑获胜")
elif(computer == 2):
if(player == 0):
print("电脑获胜")
else:
print("玩家获胜")
else:
print("平局!")
else:
print("手势错误,请阅读游戏规则!")
E:\leaningPython\venv\Scripts\python.exe E:/leaningPython/task1.py
请手动输入石头(0),剪刀(1),布(2):1
player = 1
computer 0
电脑获胜