Python学习第五课-条件控制语句

一、条件判断语句

顺序结构

Created with Raphaël 2.2.0 开始 语句1 语句2 结束

选择结构

Created with Raphaël 2.2.0 开始 表达式 语句块1 结束 语句块2 yes no

Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。
Python 编程中 if 语句用于控制程序的执行,基本形式为:

if 判断条件:
    执行语句……
else:
    执行语句……
#@author:mianhua
#@Time:2021/4/20
#@File:条件判断语句.py
#@Describition:
# a =int(input('请输入123中的一个数:'))
# if a == 1:
#     print(123)
# if a == 2:
#     print(345)
# if a == 3:
#     print("adc")

#语法: if语句在执行时,会先对条件表达式进行求值判断,
#如果为True,则执行if后的语句
#如果为False,则不执行

num =30
if num>20 and num < 40:
    print("num比20大,比40小")

二、input函数

  • 该函数可以获取用户的输入

2.1 特性

  • 1、input 需要从键盘输入内容,否则程序将被阻塞
  • 2、input 输入内容都是字符串类型

2.2 代码练习

#@author:mianhua
#@Time:2021/4/20
#@File:input语句.py
#@Describition:

a = input()
print(type(a))
print(a)
a = int(a)#将整数字符串转化为整数 int() float() list() str()
#a = eval(a)
if a==1:
  print(123)
#特性
#1、input 需要从键盘输入内容,否则程序将被阻塞
#2、input 输入内容都是字符串类型

1
<class ‘str’>
1
123

三、if-else语句

if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。
当判断条件为多个值时,可以使用以下形式:

3.1语法:

if 判断条件:
    执行语句……
else:
    执行语句……

3.2 执行流程

  • 先对if后的表达式进行求值判断
  • True执行if后的代码块
  • False执行else后的代码块

3.3 代码练习

#@author:mianhua
#@Time:2021/4/20
#@File:if-slse语句.py
#@Describition:

a =int(input('请输入123中的一个数:'))
if a == 1:
    print(123)
else:#其余所有的情况
    print(345)
# elif a ==2:
#     print(456)
# elif a == 3:
#     print(789)

四、if-elif-else语句

4.1 语法

       if 条件表达式:
                   代码块
       elif :
                   代码块
       elif:
                   代码块
       else :
                   代码块

4.2 执行流程

  • if-elif-else语句在执行时,会⾃上向下依次对条件表达式进⾏求值判断
  • 如果表达式的结果为True,则执行当前代码块,然后语句结束
  • 如果表达式的结果为False,则继续向下判断,直到找到True为止
  • 如果所有的表达式都是False,则执行else后的代码块

4.3 代码练习

#@author:mianhua
#@Time:2021/4/20
#@File:if-elif-else语句.py
#@Describition:
value = int(input('请输入你的工资:'))
if value >= 30000:
   print('有钱任性')
elif value >= 20000:
   print('有钱真好')
elif value >= 10000:
   print('哥也月薪上万了')
elif value >= 5000:
    print('工资还说得过去')
elif value>= 2000:
    print('能养活自己了')
else:
    print('吃土开心')

五、while语句

循环语句是可以重复执行指定代码块的语句,循环语句分为while循环和for循环

while 循环语句

while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:

while 判断条件(condition):
    执行语句(statements)……
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
else:
    执行语句(statements)…… 

当判断条件假 false 时,循环结束。
执行流程图如下:
在这里插入图片描述

while 循环三大要素

  • 1、要设定一个初始值
  • 2、对初始值进行约束判断
  • 3、对初始值进行修改
#@author:mianhua
#@Time:2021/4/20
#@File:while循环.py
#@Describition:


# while True:#XXX条件允许的时候执行
#   print(1111)
#
#
# print(1111)
# print(1111)
# print(1111)
# print(1111)
# print(1111)


#while 循环三大要素
#1、要设定一个初始值
#2、对初始值进行约束判断
#3、对初始值进行修改
i=0
while i <5:#XXX条件允许的时候执行
  print(1111)
  i=i+1
#求100以内所有偶数之和
i = 0
result = 0
while i < 100:
    i += 1
    if i % 2 == 0:
        result += i
print('结果为:',result)

'''
结果为: 2550
'''
i = 0
result = 0
while i < 100:
    i += 2
    result += i
print('结果为:',result)
'''
结果为: 2550
'''

六、循环嵌套

推导过程

i=0
while i<5:   #行数
    print(i)
    i+=1
‘’‘
0
1
2
3
4
...

将数字转化为*

i=0
while i<5: #行,循环执行五次,形成五行
    print('*****')
    i+=1
'''
*****
*****
*****
*****
*****
'''

使用循环嵌套

i=0
j=0
while i<5: #行,循环执行五次,形成五行
    while j<5:
        print('*')
        j+=1
    i+=1

'''
*
*
*
*
*
'''

更新print()方法 添加end=()参数

i=0
j=0
while i<5: #行,循环执行五次,形成五行
    while j<5:
        print('*',end="")
        j+=1
    i+=1
‘’‘
*****
’‘’

效果是打印了一行,打印print(j)

i=0
j=0
while i<5: #行,循环执行五次,形成五行
    while j<5:
        print('*',end="")
        j+=1
    print(j)
    i+=1
'''
*****5
5
5
5
5
...

根据打印结果发现,下列函数执行一遍以后,j=5,内部的循环体执行条件不满足,不再执行了

while j<5:
        print('*',end="")
        j+=1

所以更新j = 0到循环体内部,每次‘行’循环都重置j为0

i=0
while i<5: #行,循环执行五次,形成五行
    j = 0
    while j<5:
        print('*',end="")
        j+=1
    #print(j)
    i+=1
'''
*************************
'''

发现,结果都显示在同一行了,更新print()函数

i=0
while i<5: #行,循环执行五次,形成五行
    j = 0
    while j<5:
        print('*',end="")
        j+=1
    print()
    i+=1
'''
*****
*****
*****
*****
*****
'''

得到五行五列的现实结果

分析实现效果

'''
*  #i=0 j=1 j
** #i=1 j=2
*** #i=2 j=3
**** #i=3 j=4
***** #i=4 j=5 总结规律:每行都是j需要执行局i+1次
'''
i=0
while i<5: #行,循环执行五次,形成五行
    j = 0
    while j<i+1:
        print('*',end="")
        j+=1
    print()
    i+=1
'''
*
**
***
****
*****
'''

等到满意结果

'''  分析想要等到的结果
*****   i=0  j=5
****    i=1  j=4
***     i=2  j=3
**      i=3  j=2
*       i=4  j=1   总结规律:i+j=5 ,j=5-1
'''
i=0
while i<5: #行,循环执行五次,形成五行
    j = 0
    while j<5-i:
        print('*',end="")
        j+=1
    print()
    i+=1
'''
*****
****
***
**
*
'''

得到想要的结果

'''
九九乘法表 九行九列,外形和正三角形打印形似
'''
#新引入基本模型,然后更新数字为9,打印内容更新为乘法表
i=0
while i<9: #行,循环执行五次,形成五行
    j = 0
    while j<i+1:
        print('{}*{}={}'.format(i,j,i*j),end="")
        j+=1
    print()
    i+=1
'''
0*0=0
1*0=01*1=1
2*0=02*1=22*2=4
3*0=03*1=33*2=63*3=9
4*0=04*1=44*2=84*3=124*4=16
5*0=05*1=55*2=105*3=155*4=205*5=25
6*0=06*1=66*2=126*3=186*4=246*5=306*6=36
7*0=07*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*0=08*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
'''
#发现执行从零开始了,取值是0-8,更新i和j的取值范围
i=1
while i<10: #行,循环执行五次,形成五行
    j = 1
    while j<i+1:
        print('{}*{}={}'.format(i,j,i*j),end="")
        j+=1
    print()
    i+=1
'''
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
'''
#两个问题,1是 跟预期的数字位置颠倒,其次是中间没有隔开,继续更新程序,更换format()中i和j的位置,其次print()中,更改end=“\t"
i=1
while i<10: #行,循环执行五次,形成五行
    j = 1
    while j<i+1:
        print('{}*{}={}'.format(j,i,i*j),end="\t")
        j+=1
    print()
    i+=1
'''
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	
'''
#其实仔细观察可以得出,九九乘法表中第一个乘数是列值,第二个乘数是行值,之前等说印度小学生学的乘法表是到11的,那么我们可以实现一下
i=1
while i<12: #行,循环执行五次,形成五行
    j = 1
    while j<i+1:
        print('{}*{}={}'.format(j,i,i*j),end="\t")
        j+=1
    print()
    i+=1
'''
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	
1*10=10	2*10=20	3*10=30	4*10=40	5*10=50	6*10=60	7*10=70	8*10=80	9*10=90	10*10=100	
1*11=11	2*11=22	3*11=33	4*11=44	5*11=55	6*11=66	7*11=77	8*11=88	9*11=99	10*11=110	11*11=121	
'''

七、continue和break

  • break可以用来立即退出循环语句,包括else语句
  • continue用来跳过当次循环
i=0
while i<5:   #行数

    i+=1
    if i==2:
        break
        #continue
    print(i)
else:#while循环的后继语句,会在循环结束后继续执行
    print('正常执行完毕')
    
'''
1
'''
i=0
while i<5:   #行数
    i+=1
    if i==2:
        #break
        continue
    print(i)
else:#while循环的后继语句,会在循环结束后继续执行
    print('正常执行完毕')
    
'''
1
3
4
5
正常执行完毕
'''

八、作业

8.1 取1000以内所有水仙花数

  • 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153
  • 设计思路:遍历100-999之前所有数值,对该数值取各位,十位,百位的值,如果
    各位,十位,百位的三次幂之和等于这个值,则显示该值
#方法一:数学计算法获取个十百位数
i = 100
while i < 1000:
    b = (i // 100)
    s = ((i - b * 100) // 10)
    g = (i - 100 * b - 10 * s)
    if i == b ** 3 + s ** 3 + g ** 3:
        print(i)
    i += 1

#结果如下
'''
153
370
371
407
'''
#方法二:字符串切片法获取个十百位数
i=100
while i<1000:
    a = str(i)    #将数字转化为字符串
    b = int(a[0])  #百位
    s = int(a[1])   #十位
    g = int(a[2])   #个位
    if i == b** 3 + s** 3 + g** 3:
       print(i)
    i+=1
#结果如下
'''
153
370
371
407
'''
#更新下显示效果,增加总数统计一个当前是第几个数
i = 100
num = 0
while i < 1000:
    b = (i // 100)
    s = ((i - b * 100) // 10)  
    g = (i - 100 * b - 10 * s) 
    if i == b ** 3 + s ** 3 + g ** 3:  
        print('第{}个水仙花数是:{}'.format(num + 1, i))  
        num += 1  
    i += 1
print(f"10000以内的水仙花有{num}个。")

'''
第1个水仙花数是:153
第2个水仙花数是:370
第3个水仙花数是:371
第4个水仙花数是:407
10000以内的水仙花有4个。
'''

在这里插入图片描述

8.2 判断用户输入是否为质数

# 用户输入数字
num = int(input("请输入一个数字: "))

# 质数大于 1
if num > 1:
    # 查看因子
    for i in range(2, num):
        if (num % i) == 0:
            print(num, "不是质数")
            print(i, "乘于", num // i, "是", num)
            break
    else:
        print(num, "是质数")
'''
请输入一个数字: 4
4 不是质数
2 乘于 2 是 4
 '''       
# 升级:1、规范化输入内容必须为整数,2,增加了对与1和0的判断
num = input("请输入一个数字: ")
if num.isdigit() ==True: #判断输入内容是否所有都为整形数字
   num=int(num)
   if num > 1:
    # 查看因子
      for i in range(2, num):
        if (num % i) == 0:
            print(num, "不是质数")
            print(i, "乘于", num // i, "是", num)
            break
        else:
            print(num, "是质数")
   else:
       print(num, "不是质数,质数是指在大于1的自然数")

else:
    print("输入内容非法,请重新输入!")
# 再次升级:增加对2的判断
num = input("请输入一个数字: ")
if num.isdigit(): #判断输入内容是否所有都为整形数字
   num=int(num)
   if num > 1:
    # 查看因子
      for i in range(2, num):
        if (num % i) == 0:
            print(num, "不是质数")
            print(i, "乘于", num // i, "是", num)
            break
        else:
            print(num, "是质数")
   if num==2:#增加对2的判断
        print(num, "是质数")
   else:  #增加了对于1和0的判断
       print(num, "不是质数,质数是指在大于1的自然数")

else:
    print("输入内容非法,请重新输入!")
#再再再升级,1、更新算法,增加对大数判断的兼容性,2、增加while循环,方便程序测试
while True:
    num = input("请输入一个数字: ")
    if num.isdigit(): #判断输入内容是否所有都为整形数字
       num=int(num)
       i = 2
       while i < num:
           s = num % i
           if s == 0:
               print("{}不是质数,{}能被{}整除".format(num,num, i))
               break
           else:
               i += 1

       if num == i :
           print("{}是质数".format(num))
       elif num<=1:  #增加了对于1和0的判断
           print(num, "不是质数,质数是指在大于1的自然数")

    else:
        print("输入内容非法,请重新输入!")
#修复厨师算法Bug
while True:
    num = input("请输入一个数字: ")
    if num.isdigit(): #判断输入内容是否所有都为整形数字
       num=int(num)
       if num <= 1:  # 增加了对于1和0的判断
           print(num, "不是质数,质数是指在大于1的自然数")
       elif num ==2 or num ==3:
           print(num, "是质数")
       elif num>2:
           for i in range(2, num):
            if (num % i) == 0:
                print(num, "不是质数")
                print(i, "乘于", num // i, "是", num)
                break
            elif num == i+1:
                print(num, "是质数")
            else:
                i += 1
       else:
           print(num, "是质数")
    else:
        print("输入内容非法,请重新输入!")

8.3 猜拳游戏:

  • 出拳阶段:玩家输入,电脑随机
  • 判断阶段:玩家胜,电脑胜,平局

设计思路:结果分类一共是三类,玩家获胜,电脑获胜和平局,首先平局比较好判断,直接a,b两个值相等就可以了,可以作为一个分支,其次是玩家获:首先设计时,可以发现,0:剪刀,1:石头,2:布,的分布刚好是后面的值大于前面的值,这里里面有2个特殊情况,1是a是2:布,b是0:剪刀,虽然2>0,但电脑获胜,所以这种情况,单独设计一个分支,2,是 a是0:剪刀,b是2:布,虽然a<b,但玩家获胜,可以和a>b合并,作为一个分支,剩下的情况就是电脑获胜了,单独一个else。

#@author:mianhua
#@Time:2021/4/21
#@File:猜拳游戏思想.py
#@Describition:1、猜拳游戏:出拳玩家:手动输入电脑:随机输入 2、判断输赢: 玩家获胜电脑获胜平局 

import random
a = eval(input('猜拳游戏,0:剪刀,1:石头,2:布,请输入:'))
b = random.randint(0,2)
print('电脑选择:',b)
if a ==2 and b ==0:
    print('电脑获胜')
elif a == b:
    print('此局平局')
elif a>b or (a==0 and b==2):
    print('玩家获胜')
else:
    print('电脑获胜')

升级

#@author:mianhua
#@Time:2021/4/21
#@File:作业-猜拳游戏.py
#@Describition:1、猜拳游戏:出拳玩家:手动输入电脑:随机输入 2、判断输赢: 玩家获胜电脑获胜平局 3、加入while循环,执行10次 4、统计胜负情况
import random
num = 0
win = 0
lose = 0
blan = 0
def gambling():
    global win, lose, blan
    print('-----------------------------')
    a = eval(input('请输入:'))
    b = random.randint(0,2)
    if a ==0 and b ==0:
        #print(a, b)
        print('玩家:石头\n电脑:石头\n此局平局')
        blan+=1
    elif a==0 and b==1:
        #print(a, b)
        print('玩家:石头\n电脑:布\n电脑获胜')
        lose+=1
    elif a==0 and b==2:
        #print(a, b)
        print('玩家:石头\n电脑:剪刀\n玩家获胜')
        win+=1
    elif a==1 and b==1:
        #print(a, b)
        print('玩家:布\n电脑:布\n此局平局')
        blan+=1
    elif a==1 and b==0:
        #print(a, b)
        print('玩家:布\n电脑:石头\n玩家获胜')
        win+=1
    elif a==1 and b==2:
        #print(a, b)
        print('玩家:布\n电脑:剪刀\n电脑获胜')
        lose+=1
    elif a==2 and b==2:
        #print(a, b)
        print('玩家:剪刀\n电脑:剪刀\n此局平局')
        blan+=1
    elif a==2 and b==1:
        #print(a, b)
        print('玩家:剪刀\n电脑:布\n玩家获胜')
        win+=1
    elif a==2 and b==0:
        #print(a, b)
        print('玩家:剪刀\n电脑:石头\n电脑获胜')
        lose+=1
    else:
        #print(a, b)
        print('请重新输入')


while num<10:
    print('猜拳游戏第{}/10局,0:石头,1:布,2:剪刀'.format(num+1))
    gambling()
    print('---------------------')
    num+=1
print('玩家一共,胜{}局,负{}局,平{}局'.format(win,lose,blan))

猜拳游戏第1/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:布
此局平局


猜拳游戏第2/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:剪刀
电脑获胜


猜拳游戏第3/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:石头
玩家获胜


猜拳游戏第4/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:石头
玩家获胜


猜拳游戏第5/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:石头
玩家获胜


猜拳游戏第6/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:布
此局平局


猜拳游戏第7/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:石头
玩家获胜


猜拳游戏第8/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:布
此局平局


猜拳游戏第9/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:剪刀
电脑获胜


猜拳游戏第10/10局,0:石头,1:布,2:剪刀


请输入:1
玩家:布
电脑:剪刀
电脑获胜


玩家一共,胜4局,负3局,平3局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIANHUA_007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值