5、Python基础之if条件判断和while循环

一、条件判断

1.1 条件判断语句(if 语句)

  • 定义: 条件判断语句就是if语句
    • 重点 需要注意条件判断语句和条件运算符的区别:
      • 条件运算符是有返回结果的,而条件判断语句(if语句)是没有返回结果的。
  • 条件运算符:
## 条件运算符
# 语法:  语句1  条件表达式  else 语句2
# 条件运算符执行时,会先对条件语句中的表达式进行求职判断
# 如果判断为 True ,则执行语句1,并返回执行结果
# 如果判断为 False,则执行语句2,并返回执行结果
max = a if a > b and a > c else c
print(max)   # a
  • 条件判断语句:
# 语法:
 if   条件表达式:
      代码块1

举个栗子:
x = int(input("请输入012三个数字"))
if x == 0:
    print(111)
if x == 2:
    print(222)
if x == 1:
    print(333)
  • 代码块中保存着一组代码,同一个代码块中的代码,要么都执行,要么都不执行;
  • 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束;
  • 代码块就是一种为代码分组的的机制

1.2 input() 函数

  • 作用: input() 函数主要用来获取用户的输入
  • input()调用后,程序会立即暂停,等待用户输入
  • 用户输入完成后,点击回车程序才会继续向下执行
  • 用户输入完成以后,其所输入的内容会以返回值的形式返回。
  • 特性1: input 接收到的数据一定是一个字符串,响应和 int 类型的数据进行转换,一定要进行类型转换。
a = input("请输入数字:")
print(type(a))
----------输出---------
请输入数字: 111
<class 'str'>
  • 类型转换
    • int() 将字符串强制转换为整数类型
b = int(input("请输入数字:"))
print(type(b))
---------输出---------
请输入数字: 222
<class 'int'>
  • 特性2: input() 函数是阻塞的,阻塞程序的作用。如果不输入,后面的程序永远不执行。
print("开始录入信息")
name = input("请输入你的姓名:")
print(name)
-------输出-------
开始录入信息
请输入你的姓名:

1.3 if-else 语句 <非此即彼>

  • 语法:
if   条件表达式 :
     代码块1
else:
     代码块2
  • 执行过程:
    • if-else 语句在执行时,先对if 后的条件表达式进行请求判断
    • 如果为 True , 则执行 if 后的代码块1
    • 如果为 False,则执行 else 后的代码块2
x = int(input("请输入012三个数字:"))
if x == 0:
    print("1111")
else:
    print("2222")

1.4 if-elif-else 语句

  • 语法:
if  条件表达式1:
    代码块1
elif  条件表达式2:
    代码块2
else:
    代码块3
  • 执行流程:

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

  • 案例分析:

salary = 40000

if salary > 30000:
    print('有钱任性')
elif  salary >= 20000:
    print('解决温饱')
elif  salary >= 10000:
    print('月薪过万')
elif  salary >= 5000:
    print('新手小白')
else:
    print('吃土吧')
-------输出------
有钱任性
  • 特性: if-elif-else 条件流程是从上到下,按顺序执行的;如果前面的条件满足,后面的停止,不再进行判断。永远有一个满足条件。

  • 补救方式:在条件表达式添加逻辑运算符,来提高代码严谨性。

value =  18000

if  value >= 30000:
    print("有钱任性")
elif  value >= 5000 and value < 10000:
    print("新手小白")
elif  value >= 20000 and value < 30000:
    print("解决温饱")
elif  value >= 10000 and value < 20000:
    print("月薪过万")
else:
    print("吃土吧")
  • 有了上面逻辑判断,这样不管elif条件判断位置如何变化,最终输出结果都一样。

二、while循环

2.1 while 语句

  • 循环语句可以使指定的代码块重复指定的次数,循环语句分为2种: while 循环 和 for循环。
  • 语法:
while   条件表达式:
        代码块
else:
        代码块
  • 执行过程:
    • 只要条件表达式结果为 True ,就执行代码块。
    • 一直会无线循环,即死循环。直到条件表达式结果为 False ,循环才结束。
  • while循环三要素:
  1. 设定一个初始值;
  2. 对初始值进行条件判断,增加一个条件语句,对初始值进行一个条件表达式的限制。
  3. 初始值的自增长。

举个栗子:

i = 0
while i < 5:
print(i)
i += 1  # i = i  + 1
-----执行-----
0
1
2
3
4

可以看到,上面添加了上面初始值,和条件表达式限制之后,wile 循环不再进入死循环。

例题练习

  1. 求1-100内的所有的偶数相加
方法一:
(1) 首先获取 1-100以内的数
(2) 然后取出偶数
(3) 偶数相加
i = 0
j = 0
while i < 100:
     # print(i)
     i += 2
     if i % 2 == 0:
         j += i  # 所有偶数相加之和
         # print(j)
print(j)

方法二:直接取偶数相加
# 每个变量的值在内存中为:id , 内存地址,value 三部分。
# 上面比较 value % 2 == 0 ,换种思路,直接 让i=0, i=i+2,这样是不是直接就取的偶数 
i = 0
j = 0
while i < 100:
    i += 2 # 直接自增2 : 0,2,4,6,8……
    j += i  # 偶数相加
print(j)
--------输出--------
2550
  1. 打印 *, 每行5个,没排5个。
# print() 函数模式使用 \n 作为换行符。那么我们是不是可以,每打印5个,就换行一次,这样循环5次,就实现了:
i = 0 
while i < 5:
    print("*", end=' ')
    print("*", end=' ')
    print("*", end=' ')
    print("*", end=' ')
    print("*", end=' ')
    print()
    i += 1
# 这样可以实现,但是中间部分连续打印5次,都重复执行,也可以使用一个while循环来实现。
i = 0
while i < 5:
    j = 0
    while j < 5:
        print("*", end=' ')
        j += 1
    print()
    i += 1
------输出------
* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * *
  1. 打印 下面图案
*
* *
* * *
* * * *
* * * * *

分析:每行打印多少个等于行号个数,且和上题种情况相似。只要判断每行打印的个数即可。
i=0,i行打印 i+1个。

i = 0
while i < 5:
  j = 0
  while j < i+1:
      print("*", end=' ')
      j += 1
  print()
  i += 1
-----输出----
* 
* * 
* * * 
* * * * 
* * * * * 
  1. 打印下面图案
* * * * *      i = 0 j < 5  # 从上题中得出的规律
* * * *        i = 1 j < 4  # 那么打印4个,就是 j < 4,j<5-i
* * *          i = 2 j < 3
* *             i =3 j < 2
*               i = 4 j <1

分析: i =0 ,j <5, i 加上 j 小于的数都等于5 ,即 j < 5-i,那么打印4行呢 ,i=1 ,j <4 ;3 行,i=2,j<3

i = 0
while i < 5:
    j = 0 # j 重新赋值
    while j >5-i:
        print("*", end=' ')
    print()
    i += 1
--------输出--------
* * * * * 
* * * * 
* * * 
* * 
* 

作业

  1. 求 1000 以内的水仙花数
    科普:什么是水仙花数?
    水仙花数,指一个3位数,它的每个位上的数字的3次冥之和等于它本身。例如:1^3 + 5^3 + 3^3=153
方法一:
思路:
1.有取值范围,因此可以采用while循环,水仙花数位三位数,定义初始值count=100
2.再根据规律,根据赋值运算符取出水仙花数的每个位数,百位整除,十位对100取余再对10整除,个位:先对100取余再对10取余即可得出个位。
count = 100
while count < 1000:
    count += 1
    x = int(count / 100)
    y = int(count % 100 / 10)
    z = int(count % 100 % 10)
    if x < 10 and count == x**3 + y**3+ z**3:
        print(x,y,z,"水仙花数:",count)

方法二:切片
思路:直接把水仙花数 i 看作一个字符串,根据索引取值再int()类型转换,根据公式计算,这样是不是更简单呢 ?
i = 100
while i < 1000:
 a = str(i)
 if int(a[0])**3 + int(a[1])**3 + int(a[2]) == i:
     print(a)
i += 1
--------输出--------
1 5 3 水仙花数: 153
3 7 0 水仙花数: 370
3 7 1 水仙花数: 371
4 0 7 水仙花数: 407

2. 打印99乘法表
思路:嵌套循环

i = 1
while i < 10:
    j = 1
    while j < 1+i:
        print('%d * %d = %d' % (j,i,j*i),end='\t')
        j += 1
    i += 1
    print('\n')
---输出---
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. 获取用户输入的任意数,判断是否是质数 ?
  • 质数:又称素数,一个大于1 的自然数,除了1和它自身外,不能被其他自然数整数的数叫质数。
num = int(input("请输入一个数字:"))
if 1 < num <= 2:
    print(num,'是质数')
elif num > 2:
    i = 2 # 定义因子
    while  i < num:
       if num % i == 0:
            print(num,"不是质数")
            break
       i += 1
    else:
        print(num, '是质数')
else:
    print(num,"不是质数")
---------输出--------
请输入一个数字:7
7 是质数
请输入一个数字:1
1 不是质数
请输入一个数字:2
2 是质数
请输入一个数字:4
4 不是质数
  1. 猜拳游戏:
  • 出拳 玩家: 手动输入 电脑:随机输入
  • 判断输赢:玩家获胜 电脑胜 平局
  • 分析: 石头=0 剪刀=1 布=2
    • 电脑随机出数,从【0,1,2】中出一个随机数。
print("==========出拳游戏============")
import random
while True:
    p = input("请输入石头,剪刀,布:")
    if p != "石头" and p != "剪刀" and p != "布":
        print("输入无效,请重新输入!")
    else:
        s = random.randint(0,2)
        if s == 0:
            print("玩家出拳:",p,"电脑出拳:%s" % '石头')
        elif s == 1:
            print("玩家出拳:",p,"电脑出拳:%s" % '剪刀')
        else:
            print('玩家出拳:',p,"电脑出拳:%s" % '布')
        剪刀 = 1
        布 = 2
        if (p =="石头" and s== 1) or (p == "剪刀" and s == 2) or (p == "布" and s == 0):
            print("%s获胜" % "玩家")
        elif (p == "石头" and s == 2) or (p == "剪刀" and s == 0) or (p == "布" and s == 1):
            print('%s获胜'% "电脑")
        else:
            print('平局')
图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容