5、python条件控制语句——旺仔

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’,得到:
在这里插入图片描述

  • 需注意:

  input输入的值都是字符串,因为python是一种强文本语言,不像php之类的语言在使用运算符比较时可以强制转换类型,再进行比较,所以若想要得到其他类型的值,则需要使用例如int()eval()之类函数进行转换。

  • 例如如下代码:
a = input('请输入一个数值:')
print(type(a))
if a == 1:
    print('123')
else:
    print('abc')
  • 运行结果会如下,字符串‘1’与数值1直接比较,不会像php中一样直接强行转换后比较得到True
    5、python条件控制语句——旺仔_第1张图片

2、if语句

2.1、if简介

  • if 判断语句的基本语法:
    if 要判断的条件: 条件成立时,要做的事情
  • 注意:
      代码的缩进为一个 tab 键,或者四个空格(pycharm 自动帮我们增加) 在 python 开发中,Tab 和空格不要混用,这里一定要注意tab的使用,很多初学者都会再这里犯错,然后找到问题,然后报错,像这样:IndentationError: unindent does not match any outer indentation level缩进错误:未缩进与任何外部缩进级别都不匹配,还有一定一定不要忘记加上 :,不加也会报错的。

2.2、if-elif-else

  • 语法如下:
if 判断条件1:
    pass
elif 判断条件2:
    pass
else:
    pass
  • 特点:
    永远会执行且只有一个输出

2.3、 if-elif-elif

  • 语法如下:
if 判断条件1:
    pass
elif 判断条件2:
    pass
elif 判断条件3:
    pass
  • 特点:
    不一定会执行,但是一旦执行,就只会有一个输出

3、while循环

3.1、while简介

  • while在英语中的解释是:当…时候。
  • Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。

3.2、while循环的三大要素

  • 初始值
  • 对于初始值的判断
  • 初始值的自增长

3.3、while语法

  • 当表达式为True的时候,程序会一直执行循环体代码,直至表达式为False。
while 表达式:
    循环体
  • while实际运用
i = 1
while i <= 10:
    print(i)
    i+=1

演示效果:
5、python条件控制语句——旺仔_第2张图片

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、退出循环

为什么要退出循环,这是很多人第一的想法,这里我们需要了解一个知识——死循环。永远停不下来的循环,叫做死循环。
死循环的标准格式:while True:循环体
  可以简单的这样理解:for循环主要用于那些我们知道循环次数的循环,而while循环主要用于那些我们不知道具体循环多少次的循环,但是因为有些时候,我们根本不知道循环要何时结束,所以只能使用while
  当然,有些循环用for和while都可以实现。
  其实,你经常用到的一些程序就包含着while循环。例如,游戏程序就在一个大的while循环中,在玩家退出时停止运行。用while循环能让程序在用户没有让它停止之前一直运行,这点是for循环做不到的。
  所以在这里,退出循环就十分重要。可使用的有breakcontinue,接下来,我们将详细介绍他们的使用方法。

3.4.1 break用法

  • break 用于跳出当前循环
    当要立即退出while循环,不在运行循环体中余下的代码,也不管while后面跟的表达式是真是假,可以使用break语句。
  • 实际用法,这里运用判断输入的数是不是质数,进行演示
# 判断一个数是不是质数
a = int(input('请输入一个自然数:'))
i = 2
while i

运行结果:(这里使用29及5491来运行)
在这里插入图片描述
在这里插入图片描述

运用讲解:
  这里因为要用到的自然数是用户自己输入的,所以在代码运行前根本不知道需要循环多少次,所以使用while循环,然后我们只需要判断这个数是不是质数,所以只需要将数值a被从2到a-1的数都除一遍,只要再其中有一步可以的余数是0,就可以判断其不是质数,既可以不用再接着运行,这时就可以使用break强制退出,break之后的代码将不在运行。

3.4.2 continue用法

  • continue跳出当前循环的剩余语句,进行下一轮循环
    注意:continuebreak的区别在于,前者跳出当前(本次)循环,而后者跳出整个循环。二者既可用于while也可用于for。
  • 实际用法,这里运用打印比输入的数小的所有奇数,进行演示
# 打印比输入的数小的所有奇数
a = int(input('请输入一个数值:'))
i = 0
while i < a:
    i += 1
    if i % 2 == 0:
        continue
    print(i)

运行结果:(这里使用19来运行)
5、python条件控制语句——旺仔_第3张图片

运用讲解:这里其实跟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

5、课后作业

5、python条件控制语句——旺仔_第4张图片

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()

  • 运行结果如下:
    5、python条件控制语句——旺仔_第5张图片
  • 知识点运用及编写思路:

   运用到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次,以此类推

2、求1000以内所有的水仙花数

# 求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)
  • 运行结果如下:
    在这里插入图片描述
  • 知识点运用及编写思路:

首先要知道什么事水仙花数:

  • 水仙花数又称阿姆斯特朗数。
    三位的水仙花数共有4个:153,370,371,407;
    四位的四叶玫瑰数共有3个:1634,8208,9474;
    五位的五角星数共有3个:54748,92727,93084;
    六位的六合数只有1个:548834;
    七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
    八位的八仙花数共有3个:24678050,24678051,88593477

   使用循环语句和if语句的嵌套,运用while让从100到1000的每一个数值都进行判断,将百位数,十位数,个位数都提取出来分别赋值a、b、c,然后判断水仙花数,如果是水仙花数,则将其赋值添加给sum,最后在所有的判断结束后输出sum,得到三位数的水仙花数。

3、获取用户输入的任意数,判断其是否是质数?

# 获取用户输入的任意数,判断其是否是质数?
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进行测试):
    5、python条件控制语句——旺仔_第6张图片
    5、python条件控制语句——旺仔_第7张图片

  • 知识点运用及编写思路:

  运用while语句及if语句的嵌套,再这里,我为了输入的数更合理,所以先进行了判断,因为质数肯定都都是自然数,所以先判断用户输入的值是否大于等于1,是则继续,如果不是就提示用户重新输入。
  然后就是开始数值判断,首先如果用户输入2、3这2个数值,则肯定是质数,然后我们开始判断这个数是不是质数,所以只需要将数值a被从2到a-1的数都除一遍,只要再其中有一步可以的余数是0,就可以判断其不是质数,既可以不用再接着运行,直接输出改数不是质数,并输出其可被什么数整除。
  否则一直到循环结束,如果i的值与用户输入的sum值相等,则可以输出此数值就是质数。

4、猜拳游戏

# 猜拳游戏:
# • 出拳  玩家:手动输入  电脑:随机输入
# • 判断输赢:  玩家获胜  电脑获胜  平局
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、python条件控制语句——旺仔_第8张图片
  • 知识点运用及编写思路:
  • 这里首先要引入random 随机模块的知识点:
    random.random():生成一个0-1之间的随机浮点数
    random.randint(a,b):生成[a,b]之间的整数,包含a,b
    random.uniform(a,b):生成[a,b]之间的浮点数
    random.choice(sequence):从特定序列的中随机取一个元素,这里的序列可以是字符列表,元组等。

  这里我们运用的是randint(a,b),还运用了列表的索引,这里是关键,想了好久呢,最后就是if及while的嵌套,这里其实可以不用使用while循环的,但是因为每次运行都要重新操作,比较麻烦,所有加上了一个循环,然后input语句有阻断程序的作用,也不用担心会死循环。
  然后我们首先这里定义一个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中只要有一个成立,则用户就赢了,其他非平局的情况,都是电脑赢

5、附加(个人练习)

  • 注:以下的代码都是基于课后作业的个人练习及思考,这里就不做知识点及思路的讲解。请多多包涵
# 使用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基础)