判断语句和循环语句

依然范特西╮ 提交于 2020-03-22 09:44:36

程序的三大执行流程:顺序执行、选择执行、循环执行

一、判断

1、if比较运算符、and、or、if-else

if-else的使用格式

if 条件:
    满足条件时要做的事情1
    满足条件时要做的事情2
    满足条件时要做的事情3
       ...(省略)...
else:
    不满足条件时要做的事情1
    不满足条件时要做的事情2
    不满足条件时要做的事情3
       ...(省略)...

 

demo1

chePiao = 1 # 用1代表有车票,0代表没有车票
if chePiao == 1:
    print("有车票,可以上火车")
    print("终于可以见到Ta了,美滋滋~~~")
else:
    print("没有车票,不能上车")
    print("亲爱的,那就下次见了,一票难求啊~~~~(>_<)~~~~")

运行结果:

结果1:有车票的情况

有车票,可以上火车
终于可以见到Ta了,美滋滋~~~

结果2:没有车票的情况

没有车票,不能上车
亲爱的,那就下次见了,一票难求啊~~~~(>_<)~~~~

 

demo2

you = input("你去么?------")   #去或者不去
your_wife = input("你老婆去么------")   #去或者不去

# if you == "去" or your_wife == "去"
if you == "去"  and your_wife == "去":
    print("可以申请贷款!")

else:
    print("不可以申请贷款!")

运行结果:

 

demo3

skin_color = input("你白么?------")
property = int(input("请输入你的财产总和------"))
beautiful = input("你美么?------")

if (skin_color == "白" and property >= 10000000 and beautiful == "美"):
    print("白富美...")
else:
    print("普通人...")


                

运行结果:

 

2、if语句的注意点

<1>if xxx: 或者 else xxx: 后面的语句必须缩进,缩进为四个空格(冒号后面必须跟缩进,不局限于这两种。这是python规定的语法,不缩进会报错,其他不需要缩进的地方缩进的话也会报错)

<2>冒号后面所有连续缩进的代码块可看做是一个语句

<3>如果冒号后面遇到没有缩进的语句,就不属于if 代码块

 

3、if逻辑运算符not(其他运算符就不举例了,可以看前面的表格)

就是取反的作用

demo

 a = 90

if not(a < 60 and a > 100):
    print("及格!")
              

 

运行结果:

及格!

4、if-elif的使用

想一想:

if能完成当xxx时做事情

if-else能完成当xxx时做事情1,否则做事情2

如果有这样一种情况:当xxx1时做事情1,当xxx2时做事情2,当xxx3时做事情3,那该怎么实现呢?

答: elif

<1>elif的功能

elif的使用格式如下:

if xxx1:
     事情1
elif xxx2:
     事情2
elif xxx3:
     事情3

说明:

  • 当xxx1满足时,执行事情1,然后整个if结束
  • 当xxx1不满足时,那么判断xxx2,如果xxx2满足,则执行事情2,然后整个if结束
  • 当xxx1不满足时,xxx2也不满足,如果xxx3满足,则执行事情3,然后整个if结束

demo

score = 77

if score>=90 and score<=100:
    print('本次考试,等级为A')
elif score>=80 and score<90:
    print('本次考试,等级为B')
elif score>=70 and score<80:
    print('本次考试,等级为C')
elif score>=60 and score<70:
    print('本次考试,等级为D')
elif score>=0 and score<60:
    print('本次考试,等级为E')

 

<2> 注意点

2.1 可以和else一起使用

if 性别为男性:
    输出男性的特征
       ...
elif 性别为女性:
    输出女性的特征
       ...
else:
    第三种性别的特征
       ...

说明:

  • 当 “性别为男性” 满足时,执行 “输出男性的特征”的相关代码
  • 当 “性别为男性” 不满足时,如果 “性别为女性”满足,则执行 “输出女性的特征”的相关代码
  • 当 “性别为男性” 不满足,“性别为女性”也不满足,那么久默认执行else后面的代码,即 “第三种性别的特征”相关代码

2.2  elif必须和if一起使用,否则出错

<3>练一练

需求:获取用户输入(1-7),输入1、输出Monday,输入2、输出Tuesday ...

代码:

num = int(input("请输入一个数字(1 - 7):"))
if num == 1:
    print("Monday")
elif num == 2:
    print("Tuesday")
elif num == 3:
    print("Wednesday")
elif num == 4:
    print("Thursday")
elif num == 5:
    print("Friday")
elif num == 6:
    print("Saturday")
elif num == 7:
    print("Sunday")
else:
    print("输入错误!")

运行结果:

 

5、if嵌套 

想一想:

坐火车或者地铁的实际情况是:先进行安检如果安检通过才会判断是否有车票,或者是先检查是否有车票之后才会进行安检,即实际的情况某个判断是再另外一个判断成立的基础上进行的,这样的情况该怎样解决呢?

答:if嵌套

<1>if嵌套的格式

if 条件1:
    满足条件1 做的事情1
    满足条件1 做的事情2
      ...(省略)...
        
    if 条件2:
        满足条件2 做的事情1
        满足条件2 做的事情2
          ...(省略)...

说明

  • 外层的if判断,也可以是if-else
  • 内层的if判断,也可以是if-else
  • 根据实际开发的情况,进行选择

 

<2>if嵌套的应用

demo1:

ticket = int(input("请拿出你的车票(1表示有,0表示没有):"))

if ticket == 1:
    dao_lenght = int(input("请输入刀子的长度:"))
    print("有车票,可以进站")
    if dao_lenght < 10:
        print("通过安检")
        print("终于可以见到Ta了,美滋滋~~~")
    else:
        print("没有通过安检")
        print("刀子的长度超过规定,等待警察处理...")
else:
    print("没有车票,不能进站")
    print("亲爱的,那就下次见了,一票难求啊~~~~(>_<)~~~~)")

运行结果:

demo2

sex = input("请输入你对象的性别:")
if sex == "女":
    skin_color = input("她白么?------")
    property = int(input("请输入她的财产总和------"))
    beautiful = input("她美么?------")
    if (skin_color == "白" and property >= 10000000 and beautiful == "美"):
        print("白富美...")
    else:
        print("普通人...")

elif sex == "男":
    height = input("他高么?------")
    property = int(input("请输入他的财产总和------"))
    cool = input("他帅么?------")
    if (height == "高" and property >= 10000000 and cool == "帅"):
        print("高富帅...")
    else:
        print("普通人...")
else:
    print("中国不合法公民!")

运行结果:

 

demo3 

猜拳游戏,要求效果:

参考代码: 

import random

#1. 提示并获取用户的输入
player = int(input("请输入 0--- 剪刀 1---石头 2---布  "))

#2.让电脑出一个
computer = random.randint(0,2)  #随机产生0到2的整数


#3. 判断用户的输入,然后显示对应的结果
#玩家获胜的条件
if ((player==0 and computer==2) or (player==1 and computer==0) or (player==2 and computer==1)):
    print("赢了,请收下游戏币!")

#玩家平局的条件
elif (player == computer):
    print("平局了,决战到天亮!")
else:
    print("输了,回家拿钱!")

运行结果:

 

二、循环

1.while循环

<1>while循环的格式

while 条件:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
      ...(省略)...

 

demo1

i = 1

while i <= 10:
    print(i)
    i = i + 1

运行结果:

 

<2>while循环应用

① 计算1~100的累积和(包含1和100)

参考代码如下:

i = 1
sum = 0
while i<=100:
    sum = sum + i
    i += 1

print("1~100的累积和为:%d"%sum)

② 计算1~100之间偶数的累积和(包含1和100)

参考代码如下:

i = 1
sum = 0
while i<=100:
    if i%2 == 0:
        sum = sum + i
    i+=1

print("1~100的累积和为:%d"%sum)

 

2.while嵌套

<1>while嵌套的格式

while 条件1:
    条件1满足时,做的事情1
    条件1满足时,做的事情2
    条件1满足时,做的事情3
      ...(省略)...

    while 条件2:
         条件2满足时,做的事情1
         条件2满足时,做的事情2
         条件2满足时,做的事情3
           ...(省略)...

 

<2>while嵌套应用一

 要求:打印如下图形:

*
* *
* * *
* * * *
* * * * *

参考代码:

i = 1
while i<=5:
    j = 1
    while j<=i:
         print("*",end='')  #让print默认不换行
         j+=1
    print("\n")
    i+=1

 

<3>while嵌套应用二:九九乘法表

 

参考代码:

i = 1
while i<=9:
    j=1
    while j<=i:
        print("%d*%d=%-2d "%(j,i,i*j),end='')
        j+=1
    print('\n')
    i+=1
 

3.复合赋值运算符

注:博客前面有详细表格

例:

j = j + 1 <=>  j += 1
c = c -a <=>  c -= a
其他同理

特殊:
a = 4
a*=10-30+20 <=> a=a*(10-30+20)
而不是 a=a*10-30+20
所以如果使用复合赋值运算,右边是一个表达式,记住加一个小括号

 

4.for循环

像while循环一样,for可以完成循环的功能。

在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。

<1>for循环的格式

for 临时变量 in 列表或者字符串等:
    循环满足条件时执行的代码
else:
    循环不满足条件时执行的代码

 

demo1

name = 'dongGe'

for x in name:
    print(x)

运行结果如下:

 

demo2

name = ' '

for x in name:
    print(x)
else:
    print("没有数据")

运行结果如下:

 

 

5.break和continue

demo

i = 1
num = 1
while i <= 100:
    if i%2 == 0:
        print(i)
        num += 1
    if num == 20:
        break
    i += 1         

运行结果:

 

5.1 break

<1>for循环

普通的循环示例如下:

name = 'dongGe'

for x in name:
    print('----')
    print(x)

运行结果:

 

带有break的循环示例如下:

name = 'dongGe'

for x in name:
    print('----')
    if x == 'g': 
        break
    print(x)

运行结果:

 

<2>while循环

普通的循环示例如下:

i = 0

while i<10:
    i = i+1
    print('----')
    print(i)

运行结果:

 

带有break的循环示例如下:

i = 0

while i<10:
    i = i+1
    print('----')
    if i==5:
        break
    print(i)

运行结果:

 

break的作用:用来结束整个循环

 

5.2 continue

<1> for循环

带有continue的循环示例如下:

name = 'dongGe'

for x in name:
    print('----')
    if x == 'g': 
        continue
    print(x)

运行结果:

 

<2> while循环

带有continue的循环示例如下:

i = 0

while i<10:
    i = i+1
    print('----')
    if i==5:
        continue
    print(i)

运行结果:

 

continue的作用:用来结束本次循环,紧接着执行下一次的循环

3. 注意点

  • break/continue只能用在循环中,除此以外不能单独使用

  • break/continue在嵌套循环中,只对最近的一层循环起作用

demo

i = 1
while i<=5:
    j = 1
    while j<=i:
        print(" * ",end='')
        j += 1
        break  #break在哪层的循环里,就结束哪层的循环,就近原则
        #continue同理
    print("")  #换行
    i += 1

运行结果:

 

三、作业

①必做题:

1. 使用if,编写程序,实现以下功能:

  • 从键盘获取用户名、密码
  • 如果用户名和密码都正确(预先设定一个用户名和密码),那么就显示“欢迎进入xxx的世界”,否则提示密码或者用户名错误

2. 使用while,完成以下图形的输出

*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*

 

②选做题:

1. 根据以下信息提示,请帮小明计算,他每月乘坐地铁支出的总费用

提示信息:

北京公交地铁新票价确定

据北京市发改委网站消息称,北京市将从2015年12月28起实施公共交通新票价:地铁6公里(含)内3元,公交车10公里(含)内2元,使用市政交通一卡通刷卡乘公交车普通卡5折,学生卡2.5折。

  具体实施方案如下:

  一、城市公共电汽车价格调整为:10公里(含)内2元,10公里以上部分,每增加1元可乘坐5公里。使用市政交通一卡通刷卡乘坐城市公共电汽车,市域内路段给予普通卡5折,学生卡2.5折优惠;市域外路段维持现行折扣优惠不变。享受公交政策的郊区客运价格,由各区、县政府按照城市公共电汽车价格制定。

  二、轨道交通价格调整为:6公里(含)内3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分,每增加1元可乘坐20公里。使用市政交通一卡通刷卡乘坐轨道交通,每自然月内每张卡支出累计满100元以后的乘次,价格给予8折优惠;满150元以后的乘次,价格给予5折优惠;支出累计达到400元以后的乘次,不再享受打折优惠。

要求:

假设每个月,小明都需要上20天班,每次上班需要来回1次,即每天需要乘坐2次同样路线的地铁;每月月初小明第一次刷公交卡时,扣款5元;编写程序,帮小明完成每月乘坐地铁需要的总费用

 

作业解答:

必做题1

代码:

work_user = "受害者"
work_passwd = "123456"

user = input("请输入用户名:")
passwd = input("请输入密码:")
if (user == work_user) and (passwd == work_passwd):
    print("-"*10)
    print("欢迎来到侏罗纪世界!")
    print("-"*10)
else:
    print("无法登录!")

运行结果:

 

必做题2

代码:

i = 1
while i<=5:
    j = 1
    while j<=i:
        print('*',end='')
        j+=1    
    print("\n")
    i+=1
while i>=1:
    j = 1
    while j<=i-1:
        print('*',end='')
        j+=1
    print("\n")
    i-=1

运行结果:

 

 选做题

代码:

 

#小明每月月初第一次刷公交卡,扣款5元,说明从他家到他们公司坐电汽需要花费5元
#从电汽的价格表反推,可以得出 家--> 公司 的距离为50公里
#以上结论是在把距离当做位移的情况下成立(毕竟坐电汽和坐地铁的路线不一样,距离#肯定不一样)

#接下来编写一个坐地铁根据距离求费用的程序
#1. 获取用户输入的距离,单位为公里
import math

distance = float(input("请输入从你家到你们公司的距离(公里):"))

#2. 编写小明每月坐地铁的消费
if (distance > 0) and (distance <= 6):
    month_money = (3*2)*20   #乘以2是因为来回两趟,再乘以20是每月坐20天
elif (distance > 6) and (distance <= 12):
    month_money = (4*2)*20
elif (distance > 12) and (distance <= 22):
    month_money = (5*2)*20
elif (distance > 22) and (distance <= 32):
    month_money = (6*2)*20
elif distance > 32:
    up_32 = math.ceil((distance - 32)/20)  
    #向上取整ceil(),向下取整floor(),四舍五入round()
    #print(up_32)
    month_money = ((6 + up_32)*2)*20#3. 计算是否有折扣
if month_money >= 100:
    month_money *= 0.8
    print("您本月的地铁消费为:%d元" % month_money)
elif month_money >= 150:
    month_money *= 0.5
    print("您本月的地铁消费为:%d元" % month_money)
else:
    print("您本月的地铁消费为:%d元" % month_money)

 

运行结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!