• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
花儿爷
博客园    首页    新随笔    联系   管理     
python_控制语句

控制语句与循环语句

在程序开发中,一共有三种流程方式:
顺序 —— 从上向下,顺序执行代码
分支—— 根据条件判断,决定执行代码的分支
循环—— 让特定代码 重复执行 

条件判断

判断语句又被称为分支语句,正是因为有了判断,才让程序有了很多的分支,如果条件满足,才能做某件事情,如果条件不满足,就做另外一件事情,或者什么也不做;

if...单分支

if 条件:
    满足条件后要执行的代码
if 2<1:
    print("不满足条件,所以不打印!")
print("哈哈")

if...else双分支

if 条件:
    满足条件执行代码
else:
    if条件不满足就走这段
if 3>2:
    print("满足条件,执行")
else:
    print("不满足执行")

If...elif: python 并不支持 switch 语句

n=4
if n==3:
    print("不成立")
elif n==5:
    print("条件不成立")
elif n==4:
    print("条件成立")
else:
    print("其他值")

条件判断练习:

# 判断语句练习
n = 3
if n == 3:
    print("n和3相等")
print("if代码块结束!")

#用户名判断
name = input("姓名:")
if name == "huahua":
    print("欢迎花花")
else:
    print("输入错误")

# 嵌套
name = input("请输入您的名字:")
if name.startswith("zhao"):
    if name.endswith("flowers"):
        print("欢迎flowers")
    elif name.endswith('yu'):
        print("欢迎yu")
    else:
        print("未知姓名")
print("退出")


#判断练习
x = 20
y = 40
if x > y:
    print("x>y")
else:
    print("x<y")
s1 = "hello"
s2 = "Hell"
if s1 > s2 and x > y:
    print("条件满足")
elif not s1 < s2:
    print("基本条件满足")  # 条件满足
else:
    print("不满足条件")

'''1. 定义一个整数变量记录年龄
2. 判断是否满 18 岁 (**>=**)
3. 如果满 18 岁,允许进网吧嗨皮'''
# age=eval(input("请说明你的年龄:"))
# if age>=18:
#     print("欢迎进入网吧")
# else:
#     print("不满18岁未成年人禁止入内!")
# print("都会执行")

# 定义一个整数变量 `age`,编写代码判断年龄是否正确,要求人的年龄在 0-120 之间
age = 15
if age >= 0 and age <= 120:
    print("年龄正确")
else:
    print("年龄不符")

# 定义两个整数变量 `python_score`、`c_score`,编写代码判断成绩要求只要有一门成绩 > 60 分就算合格
python_score = 30
c_score = 70
if python_score >= 60 or c_score >= 60:
    print("满足条件")


# 定义一个布尔型变量 `is_employee`,编写代码判断是否是本公司员工如果不是提示不允许入内
is_employee = True
if not is_employee:  # 当条件不满足时才会执行not
    print("禁止入内")

'''
定义 `holiday_name` 字符串变量记录节日名称
2. 如果是 **情人节** 应该 **买玫瑰**/**看电影**
3. 如果是 **平安夜** 应该 **买苹果**/**吃大餐**
4. 如果是 **生日** 应该 **买蛋糕**
5. 其他的日子每天都是节日啊……
'''
holiday_name = "情人节"
if holiday_name == "情人节":
    print(f"{holiday_name}应该买玫瑰,看电影!")
elif holiday_name == "平安夜":
    print(f"{holiday_name}应该买苹果,吃大餐!")
elif holiday_name == "生日":
    print(f"{holiday_name}应该买蛋糕!")
else:
    print(f"{holiday_name}其他的日子每天都是节日啊")

'''
1. 定义布尔型变量 `has_ticket` 表示是否有车票
2. 定义整型变量 `knife_length` 表示刀的长度,单位:厘米
3. 首先检查是否有车票,如果有,才允许进行 **安检**
4. 安检时,需要检查刀的长度,判断是否超过 20 厘米
    * 如果超过 20 厘米,提示刀的长度,不允许上车
    * 如果不超过 20 厘米,安检通过
5. 如果没有车票,不允许进门
'''
has_ticket = True
knife_length = 10
if has_ticket:
    print("有车票,请开始安检......")
    if knife_length >= 20:
        print(f"刀的长度为{knife_length}厘米,不允许上车")
    else:
        print("安检通过")
else:
    print("无车票,请先买票")

# 1、输入一个数,判断一个数n能同时被3和5整除
n = eval(input("请输入数字:"))
if n % 5 == 0 and n % 3 == 0:
    print("可以整除")
else:
    print("不能整除")

'''

1. 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)
2. 电脑 **随机** 出拳 
3. 比较胜负
| 序号 | 规则 |
| :---: | :---: |
| 1 | 石头 胜 剪刀 |
| 2 | 剪刀 胜 布 | 
| 3 | 布 胜 石头 |
'''
import random
player = int(input("输入要出的拳 —— 石头1/剪刀2/布3:"))
computer = random.randint(1, 3)  # `random.randint(a, b)` ,返回 `[a, b]` 之间的整数,包含 `a` 和 `b`
print(f"电脑输出的是{computer}")
if ((player == 1 and computer == 2)
        or (player == 2 and computer == 3)
        or (player == 3 and computer == 1)):
    print("欧耶,我赢了")
elif player == computer:
    print("平局了")
else:
    print("不行,我要和你决战到天亮!")

'''
定义一个函数,成绩作为参数传入。如果成绩小于60,则输出不及格。
如果成绩在60到80之间,则输出良好;如果成绩高于80分,
则输出优秀,如果成绩不在0-100之间,则输出 成绩输入错误'''
grade = eval(input("请输入成绩:"))


def a(grade):
    if grade > 80:
        print("优秀")
    elif 60 <= grade <= 80:
        print("良好")
    elif grade < 60:
        print("不及格")
    return
a(grade)


# 根据用户输入内容打印其权限
name = input('请输入用户名字:')
if name == 'flowers':
    print('超级管理员')
elif name == 'mr':
    print('普通管理员')
elif name == 'lan' or name == 'coli':
    print('业务主管')
else:
    print('普通用户')

'''用三行print,完成以下信息的显示:

    ==================================
    =        欢迎进入到身份认证系统V1.0
    = 1. 登录
    = 2. 退出
    = 3. 认证
    = 4. 修改密码
    ==================================
'''
print("="*25)
print("=\t欢迎进入身份认证系统V1.0\n= 1. 登录\n= 2.退出\n= 3.认证\n= 4.修改密码")
print("="*25)


# 编写程序,从键盘获取一个个信息,然后按照下面格式显示
'''==================================
    姓名: dongGe    
    QQ:xxxxxxx
    手机号:131xxxxxx
    公司地址:北京市xxxx
    =================================='''
name = input("姓名:")
QQ = input("QQ:")
phone_num = input("手机号:")
addr = input("地址:")
print("=" * 25)
print(f"姓名:{name}\nQQ:{QQ}\n手机号:{phone_num}\n公司地址{addr}")
print("=" * 25)

# 编写程序从键盘获取用户名、密码,如果用户名和密码都正确(预先设定一个用户名和密码),那么就显示“欢迎登陆xxx”,否则提示密码或者用户名错误
name = "flowers"
pw = "123"
username = input("输入用户名:")
password = input("输入密码:")
if username == name and password == pw:
    print(f"欢迎{username}")
else:
    print("用户名或密码错误!")
    

#嵌套:判断验证码之后在判断用户名密码
username = input("请输入用户名:")
password = input("请输入密码:")
code = 'qwer'
your_code = input("请输入验证吗:")
if your_code == code:
    if username =='flower' and password=='123':
        print('登录成功')
    else:
        print('登录失败')
else:
    print('验证码错误')

循环语句

while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。另外,在 Python 中没有 do..while 循环。

循环的作用就是让指定的代码重复的执行
for 循环 重复执行语句

嵌套循环 你可以在while循环体中嵌套for循环

while 循环如何终止:

改变条件、break、系统命令;

1.While 循环语句

初始条件设置 —— 通常是重复执行的 计数器

while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件(计数器 + 1)

# 1. 定义重复次数计数器
i = 0    #程序计数法从 `0` 开始)—— 几乎所有的程序语言都选择从 0 开始计数
# 2. 使用 while 判断条件
while i< 5:
    # 重复执行的代码
    print("hello")
    # 处理计数器 i
    i+=1
print(f"循环结束后输出i的值是:{i}")    #注意:循环结束后,之前定义的计数器条件的数值是依旧存在的

循环使用 else 语句

当while循环体不满足条件时执行else

#while循环和for循环中使用else语句,使用了随机整数,每次运行结果都不同
import random
x=0
while x<10:
    x+=1
    if x==random.randint(1,20):
        print(x)
        break
else:
    print("没有中断循环")
#例子2
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

#while else 当while循环被break打断,就不会执行else得结果
count=0
while count<5:
    count+=1
    if count==3:break #跳出循环
    print(count)
else:
    print("循环正常执行完了")
print("------out of while loop--------")

 

循环控制语句

`break` 和 `continue` 是专门在循环中使用的关键字,只针对 当前所在循环有效;

`break` 某一条件满足时,退出循环,不再执行后续重复的代码;
`continue` 某一条件满足时,不执行后续重复的代码;

 pass 语句:Python pass是空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句。

#break某一条件满足时,退出循环,不再执行后续重复的代码
i=0
while i<=10:
    if i==3:
        break
    print(i)
    i+=1
print("over")

#continue在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
i = 0
while i < 10:
    # 当 i == 7 时,不希望执行需要重复执行的代码
    if i == 7:
        # 在使用 continue 之前,同样应该修改计数器
        # 否则会出现死循环
        i += 1
        continue
    # 重复执行的代码
    print(i)
    i += 1

#输出1234568910
i = 0
while i<10:
    i += 1
    if i == 7:
        continue
    print(i)
print('结束')

#continue和pass的区别
a="python"
i=2
for e in a:
    if e=="y":
        pass
        i=3
    else:
        print(e+str(i))  #输出:p2、t3、h3、o3、n3

a="python"
i=2
for e in a:
    if e=="y":
        continue
        i=3
    else:
        print(e+str(i))  #输出:p2、t2、h2、o2、n2 

2.嵌套循环

while ` 嵌套就是:` while ` 里面还有 ` while `

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

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

处理条件
2

处理条件
1
'''在控制台连续输出五行`*`,每一行星号的数量依次递增,使用字符串 * 打印
*
**
***
****
*****
'''
# row = 1
# while row <= 5:
#     print("*" * row)
#     row += 1


#使用循环嵌套打印小星星
row = 1
while row <= 5:
    # 假设 python 没有提供字符串 * 操作
    # 在循环内部,再增加一个循环,实现每一行的 星星 打印
    col = 1
    while col <= row:
        print("*", end="")

        col += 1
    # 每一行星号输出完成后,再增加一个换行
    print("")
    row += 1

#打印99乘法表
# 定义起始行
row = 1

# 最大打印 9 行
while row <= 9:
    # 定义起始列
    col = 1

    # 最大打印 row 列
    while col <= row:

        # end = "",表示输出结束后,不换行
        # "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐
        print("%d * %d = %d" % (col, row, row * col), end="\t")

        # 列数 + 1
        col += 1

    # 一行打印完成的换行
    print("")

    # 行数 + 1
    row += 1

循环练习:

#计算 0 ~ 100 之间所有数字的累计求和结果
#0. 定义最终结果的变量
result = 0
# 1. 定义一个整数的变量记录循环的次数
i = 0
# 2. 开始循环
while i <= 100:
    print(i)
    # 每一次循环,都让 result 这个变量和 i 这个计数器相加
    result += i

    # 处理计数器
    i += 1
print("0~100之间的数字求和结果 = %d" % result)


#计算 0 ~ 100之间所有偶数的累计求和结果
result=0
i=0
while i<=100:
    if i%2==0:
        print(i)
        result+=i
    i+=1
print(f"0~100之间的数字求和结果{result}")

#输出1-100内所有得奇数
x=0
while x<100:
    if x%2==1:
        print(x)
    x+=1
#方法二
x=1
while x<101:
    print(x)
    x+=2

#设定一个数字,给三次机会让用户输入数字如果比数字大就显示猜测大了,小了就猜测小了,猜对了退出循环;
count = 0
while count<3:
    num = int(input('请输入数字:'))
    if num >66:
        print('猜的数字大了')
    elif num<66:
        print('猜的数字小了')
    else:
        print('恭喜你猜对了')
        break
    count+=1

else:
    print('请明天再试')

#用户登录三次输入错机会,且每次输入错误时提示剩余错误次数
count = 1
while count<=3:
    name = input('用户名:')
    pw = input('密码:')
    if name =='flower' and pw =='123':
        print('登录成功')
    else:
        print(f'输入错误,您还有{3-count}次机会')
    count+=1
print("输入次数超过三次,请明天再来")


#输入一个数判断是奇数还是偶数,end退出循环
while True:
    x = input("请输入一个数:")
    if x=="end":
        break
    num=int(x)
    if num%2==0 :
        print("{}是偶数".format(num))
    else:
        print("{}是奇数".format(num))
else:
    print("end结束")

#编写代码,实现一个判断用户输入的年份是否是闰年的程序
while True:
    year = int(input("请输入年份:"))
    if year %400==0 or year%4==0 and year%100 !=0:
        print("这是闰年")
    else:
        print("不是闰年")

#while循环和for循环中使用else语句,使用了随机整数,每次运行结果都不同
import random
x=0
while x<10:
    x+=1
    if x==random.randint(1,20):
        print(x)
        break
else:
    print("没有中断循环")

#使用while,完成以下图形的输出
i = 1
x = 4
while i <= 9:
    if i <= 5:
        print("*" *i)
    elif i > 5:
        print("*" *x)
        x -= 1
    i += 1

#编写代码,实现输入某年某月某日,判断这一天是这一年的第几天?闰年情况也考虑进去
print("==== please ouput in this format 'year/month/day' ====")
all_day=0
while True:
    moth = [31, 30, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    year = input("请输入年月日:")
    y,m,d=year.split("/")
    y=int(y)
    m=int(m)
    d=int(d)
    if y%400==0 or y%4==0 and y%100 !=0:
        moth[1]=28
        if m>0 and m<12:
            if d>0 and d<moth[m-1]:
                for i in moth[0:m-1]:
                    all_day+=i
                all_day=all_day+d
            else:
                print("超出范围请重试")
        else:
            print("超出范围请重试")
        break
    else:
        if m>0 and m<12:
            if d>0 and d<moth[m-1]:
                for i in moth[0:m-1]:
                    all_day+=i
                all_day=all_day +d
            else:
                print("超出范围请重试")
        else:
            print("超出范围请重试")
        break
print("这是%s的第%s天"%(y,all_day))

3.For循环

For...in..

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

languages = ["C", "C++", "Perl", "Python"]
for x in languages:  #遍历一个列表
    print(x)

#break 语句用于跳出当前循环体
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    if site =="Runoob":
        print("菜鸟")
        break
    print(site)
else:
    print("没有循环数据")
print("完成循环")

#内置range()函数。它会生成数列
for y in range(4):
    print(y)

#也可以使用range指定区间的值
for v in range(10,20):
    print(v)
#range以指定数字开始并指定不同的增量甚至可以是负数,叫做'步长'
for i in range(0,10,3):   #结果0,3,6,9
    print(i)

for c in range(10,0,-2):   #结果是:10,8,6,4,2
    print(c)

a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']

for i in range(len(a)):
    print(i, a[i])   #0 Google,1 Baidu,2 Runoob,3 Taobao,4 QQ

a=list(range(5))   #使用range()函数来创建一个列表
print(a)

循环使用 else 语句

for num in [1,2,3,4,5]:
    print(num)
    if num == 3:
        break
    else:
        # 如果循环体内部使用break退出了循环
        # else 下方的代码就不会被执行
        print("判断条件不成立时会执行")

print("循环结束")


import random
x=0
while x<10:
    x+=1
    if x==random.randint(1,20):
        print(x)
        break
else:
    print("没有中断循环")


# 在学员列表中搜索指定的姓名
students = [
    {"name": "阿土"},
    {"name": "小美"}
]
find_name = "张三"
for stu_dict in students:
    print(stu_dict)
    if stu_dict["name"] == find_name:

        print("找到了 %s" % find_name)

        # 如果已经找到,应该直接退出循环,而不再遍历后续的元素
        break
    # else:
    #     print("抱歉没有找到 %s" % find_name)
else:
    # 如果希望在搜索列表时,所有的字典检查之后,都没有发现需要搜索的目标
    # 还希望得到一个统一的提示!
    print("抱歉没有找到 %s" % find_name)

print("循环结束")

 练习:

打印九九乘法表

#for 循环语句实现:
# for i in range(1,10):
#     for j in range(1,10):
#         print(j,"x",i,"=" ,i*j,"\t",end="")
#         if i==j:
#             print("")
#             break

 

小知识随机数:
在 `Python` 中,要使用随机数,首先需要导入随机数的模块 —— “工具包”
import random
导入模块后,可以直接在模块名称后面敲一个 `.` 然后按 `Tab` 键,会提示该模块中包含的所有函数
random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20
random.randint(20, 20) # 结果永远是 20
random.randint(20, 10) # 该语句是错误的,下限必须小于上限 

转义字符 | 描述 |
| --- | --- |
| \\\\ | 反斜杠符号 |
| \\' | 单引号 |
| \\" | 双引号 |
| \n | 换行 |
| \t | 横向制表符 |
| \r | 回车 |

posted on 2017-10-25 17:21  flowerszhao  阅读(222)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3