python 基础之 控制结构 篇

在这里插入图片描述

分支语句

  • 语法:
if  布尔表达式1:     # if语句基本结构,描述了程序在布尔表达式结构为True的情况下程序需要执行的动作
    语句1
    ......
elif  布尔表达式2:   #可选的,指定程序在若干不同的条件下需要执行的动作
    语句1           # 如果布尔表达式1结构为False,则判断表达式2的结果是否为True,以此类推
    ......
......
else:               # 可选的,前面的所有布尔表达式都为False,则执行else中的动作
     语句1
    ......

例1:输入1个字符,判断这个字符的类型(数字、大写字母、小写字母、符号)。提示:使用ord(obj)函数获取字符的ASCII值,根据ASCII值符判断其类型

image.png

str = input('请输入1个字符:')
# 检查输入,如果输入的不是1个字符则结束程序,是则计算出这个字符的ASCII值
if len(str) == 1:
    asc = ord(str)   # 获取字符的ASCII值
    if 48 <= asc <= 57 :
        result = '数字'
    elif 65 <= asc <= 90:
        result = '大写字母'
    elif 97 <= asc <= 122:
        result = '小写字母'
    else:
        result = '符号'
    print(f'{str}为:{result}')
else:
    print('输入错误')

例2:使用一个字典保存学生信息(学号作为键,值是一个列表,列表中包含学生的姓名、性别、手机号)。接收外部输入的学生的信息(学号),如果学生存在,则打印出学生的信息;如果不存在,继续输入学生的姓名、性别、手机号,将该学生添加到字典中,打印出学生信息

students = {'1001':['杨雨','女','17712345678'],
            '1002':['杨宇','男','17312345678'],
            '1003':['张宇','女','13512345678'],
            '1004':['赵宇','男','18612345678'],}
stno = input('学号:')
# 通过成员运算符判断键是否存在
if stno in students:
    student_info = students[stno]
    print(f'学号:{stno}\t姓名:{student_info[0]}\t性别:{student_info[1]}\t手机号:{student_info[-1]}')
else:
    print(f'{stno}不存在,请继续录入学生信息')
    name = input('姓名:')
    gender = input('性别:')
    phno = input('手机号:')
    students[stno] = [name,gender,phno]   # 将新录入的学生信息保存在字典中
    print(f'学号:{stno}\t姓名:{name}\t性别:{gender}\t手机号:{phno}')
    
# 方法2:通过get方法的返回值判断键是否存在
# student_info = students.get(stno)   # 获取指定键的值,赋值给变量,None/['张宇','女','13512345678']
# if bool(student_info) == True:
#     print(f'学号:{stno}\t姓名:{student_info[0]}\t性别:{student_info[1]}\t手机号:{student_info[-1]}')
# else:
#     print(f'{stno}不存在,请继续录入学生信息')
#     name = input('姓名:')
#     gender = input('性别:')
#     phno = input('手机号:')
#     students[stno] = [name,gender,phno]   # 将新录入的学生信息保存在字典中
#     print(f'学号:{stno}\t姓名:{name}\t性别:{gender}\t手机号:{phno}')

例3:声明一个字典保存用户信息(账号作为键,值是一个列表,列表中包含用户姓名,密码,账户余额)。接收外部输入的账号和密码,完成登录操作。如果账号错误,提示账号错误,请重新输入。账号正确则输入密码,如果密码错误,提示密码错误,请重新输入;密码正确则登录成功,打印出账户余额信息尊敬的 张**林 先生/女士,您的账户余额为 xxx.xx 元,程序结束(姓名的第二个字替换为,账户余额保留2位小数)

image.png

accounts = {'1001':['杨雨','123456',1000],
            '1002':['杨宇','111111',2000],
            '1003':['张宇','123123',3000.98],
            '1004':['赵宇','123123',5001.24],}
# 输入账号
account = input('账号:')
# 检查账号是否存在
if account in accounts:
    passwd = input('密码:')
    # 检查密码是否正确
    if passwd == accounts[account][1]:
        name = accounts[account][0]   # 姓名
        balance = accounts[account][-1]  # 余额
        print(f'尊敬的 {name.replace(name[1],"*",1)} 先生/女士,您的账户余额为 {balance:.2f} 元')
    else:
        print('密码错误,请重新输入')
else:
    print('账号不存在,请重新输入')

循环语句

  • while循环

  • 语法:

while 布尔表达式:    # 在布尔表达式结果为True的情况下循环一直执行,直到其结果为False
    语句1
    语句2
    ......

例1:输出1-10这10个数字

image.png

n = 0   # 循环控制变量
while n < 10:   # 循环继续的条件
    n += 1   # 步长
    print(n)    # 循环体

例2:输出1+2+…+99+100的和

image.png

n = 0   # 循环控制变量
s = ''
ss = 0  # 保存和
while n < 100:   # 循环继续的条件
    n += 1   # 步长
    ss += n  # 每循环一次将n的值累加到ss上
    s = f'{s}+{str(n)}'
    print(f'第{n:2}次循环:和为-{ss},表达式-s = {s[1:]}')    # 循环体

例3:输入1个10-20之间的整数n,计算出1+2+…+n的和。如果n不在[10,20]范围内提示错误

image.png

n = 0   # 循环控制变量
s = 0  # 保存和
m = input('请输入10-20之间的整数:')
if m.isdecimal():   # 检查输入的内容是否为纯数字
    m = int(m)
    if 10 <= m <= 20:  # 检查输入数字的范围是否在10-20之间
        while n < m:   # 求和
            n += 1
            s += n
        print(f'1-{m}的和为:{s}')
    else:
        print('请输入10-20之间的数字')
else:
    print('请输入数字')

   
方法2:
n = 0   # 循环控制变量
s = 0  # 保存和
m = input('请输入10-20之间的整数:')
if m.isdecimal() and 10 <= (m:=int(m)) <= 20:   # 检查输入的内容是否为纯数字
    while n < m:   # 求和
        n += 1
        s += n
    print(f'1-{m}的和为:{s}')
else:
    print('请输入10-20之间的数字') 
  • 针对循环次数未知的情况,可以通过循环控制变量值的变化来控制循环继续还是结束,比如声明一个变量a=1,循环的条件可以写成a==1,在循环需要结束的地方给变量重新赋值(1以外的任何值)即可

例4:声明一个字典保存用户信息(账号作为键,值是一个列表,列表中包含用户姓名,密码,账户余额)。接收外部输入的账号和密码,完成登录操作。如果账号错误,提示账号错误,请重新输入。账号正确则提示账号正确

accounts = {'1001':['杨雨','123456',1000],
            '1002':['杨宇','111111',2000],
            '1003':['张宇','123123',3000.98],
            '1004':['赵宇','123123',5001.24],}
flag = True  # 循环控制变量
while flag:
    acc = input('账号:')
    if acc in accounts:
        print('账号正确')
        flag = False  # 为变量重新赋值为False,循环结束
    else:
        print('账号错误,请重新输入')

for循环

  • 语法:
for i in iterable:
    语句1
    语句2
    ......
    
    
for i in range(a,b):
    语句1
    语句2
    ......
  • i,变量,在循环内部可以直接使用该变量
  • iterable,可迭代对象,将其内部每一个元素分别赋值给变量i,直到元素取完为止
  • range(a,b),生成一个[a,b)范围内的数字序列

例1:输出1-10这10个数字

for i in range(1,11):
    print(i)

例2:将字符串qwe$%123&*中特殊符号去除

s = 'qwe$%123&*'
for i in s:
    if i.isalnum() == False:
        s = s.replace(i,'')
print(s)

例3:输出九九乘法表

for i in range(1,10):    # 控制行
    for j in range(1,i+1):  # 控制列
        print(f'{j}*{i} = {i*j:2}',end='\t')
    print('')

控制结构语句

统计字符:从键盘输入一个字符串,统计这个字符串当中包含几个大写字母,几个小写字母,几个数字

s = input('请输入一个字符串:')
u,l,n = 0,0,0  # 分别保存大写字母、小写字母、数字的数量
for i in s:   # 遍历字符串s中的每一个字符,判断其类型
    if i.isdecimal():  # 检查是否为数字
        n += 1
    elif i.isupper(): # 检查是否为大写字母
        u += 1
    elif i.islower(): # 检查是否为小写字母
        l += 1
print(f'大写字母:{u}\t小写字母:{l}\t数字:{n}')

其他

  • continue,结束当前这一次循环,开始下一次新的循环
  • break,终止循环
  • else,如果循环没有遇到break语句而终止,则会执行else中的语句
while 布尔表达式:
    ......
else:
    ......
    
for i in iterable:
    ...
else:
    ...
s = 'abcdemfg'
for i in s:
    if i == 'm':
        print('m包含在字符串s中')
        break
else:
    print('m不包含在字符串s中')

练习题

鸡兔同笼不知数,有头32,脚86,问鸡兔各几何?

# 方法1:双层for循环
for j in range(1,32):   # 控制鸡的数量
    for t in range(1,32):   # 控制兔的数量
        if t+j == 32 and j*2+t*4 == 86:
            print(f'鸡:{j}\t兔:{t}')
            break
            
# 方法2:单层for循环
for j in range(1,32):  # 控制鸡的数量
    t = 32-j   # 兔的数量
    if j*2+t*4 == 86:
        print(f'鸡:{j}\t兔:{t}')
        break
        
# 方法3:二元一次方程
head,foot = 32,86
t = foot/2-head   # 兔的数量
j = 32-t          # 鸡的数量
print(f'鸡:{j}\t兔:{t}')

有红、白、黑三种颜色的球,其中红球与白球共有28个,黑球与红球共有30个,白球与黑球共有36个,计算三种颜色的球分别有多少个?
输入的一个整数,按相反顺序输出该数。例如,输入为3578,则输出8753

while True:
    no = input('请输入一个整数:')
    if no.isdecimal():
        print(no[::-1])   # 方法1,切片
        # 方法2:将字符串转换为列表,将类别元素反向,将列表元素拼接成一个字符串
        tmp = list(no)
        tmp.reverse()
        print(''.join(tmp))
        break
    else:
        print('输入错误,请重新输入')

一个10000以内整数,它加上100和加上268后都是一个完全平方数(比如9,16等),请问该数是多少?

# 方法1:整数n开方后取整,判断整数部分的平方是否等于n
for i in range(10000):
    n = int((i+100)**0.5)
    m = int((i+268)**0.5)
    if n**2 == i+100 and m**2 == i+268:
        print(i)
        
# 方法2:整数n开方后对1求余,判断余数是否为0
for i in range(10000):
    if (i+100)**0.5%1 == 0 and (i+268)**0.5%1 == 0:
        print(i)

计算200以内的所有质数(即只有1和其自身能够被这个数整除的数,比如3,5,7,13等)

for i in range(2,200):
    for j in range(2,i):
        if i%j == 0:
            break
    else:
        print(i)

for i in range(2,200):
    flag = 1
    for j in range(2,i):
        if i%j == 0:
            flag = 0
            break
    if flag == 1:
        print(i)

输入一个1-10之间的整数,计算这个数的阶乘(5! = 5X4X3X2X1)

n = input('请输入1个1-10的整数:')
if n.isdecimal() and 1 <= (n:=int(n)) <= 10:  # 检查输入的内容是否合法
    j = 1   # 保存阶乘
    for i in range(1,n+1):
        j *= i
    print(f'{n}的阶乘为:{j}')
else:
    print('输入错误,请输入1个1-10的整数')

输入3个1-10之间的整数,分别表示三角形的三条边。判断这3条边能否构成三角形,如果能输出三角形的类型(普通三角形、等腰三角形、等边三角形、直角三角形,并且计算出三角形的面积(海伦公式)

image.png

n = input('请输入1个1-10的整数:')
p = input('请输入1个1-10的整数:')
q = input('请输入1个1-10的整数:')
# 检查输入的内容是否合法
if (n+p+q).isdecimal() and 1 <= (n:=int(n)) <= 10 and 1 <= (p:=int(p)) <= 10 and 1 <= (q:=int(q)) <= 10:
    # 检查输入的3个整数是否能组成三角形
    if n+p > q and n+q > p and p+q > n:
        # 判断三角形类型
        if n == p and p == q:
            result = '等边三角形'
        elif n == p or p == q or n==q:
            result = '等腰三角形'
        else:
            result = '普通三角形'
        l = (n+p+q)/2   # 半周长
        s = (l*(l-n)*(l-q)*(l-p))**0.5  # 面积
        print(f'{n}、{p}、{q}构成{result},面积为:{s:.2f}')
    else:
        print(f'{n}、{p}、{q}不能构成三角形')
else:
    print('输入错误,请输入1个1-10的整数')

使用字典保存用户信息userinfo = {‘1001’:[‘杨洋’,‘123456’,1000.00], ‘1002’:[‘张琳琳’,‘123123’,9865.98], ‘1003’:[‘杨一二’,‘000000’,100.00]},完成注册功能。输入账号、姓名、密码(必须为6位,只能包含数字)、余额

如果账号存在,提示'账号已存在,请重新输入'

如果密码不符合要求,提示'密码不符合要求,请重新输入'

注册成功后,提示'注册成功',将用户信息添加到字典中
userinfo = {'1001':['杨洋','123456',1000.00],
            '1002':['张琳琳','123123',9865.98],
            '1003':['杨一二','000000',100.00]}
while True:
    acc = input('账号:')
    name = input('姓名:')
    pwd = input('密码:')
    bal = input('余额:')
    if acc in userinfo:    # 检查账号是否存在
        print('账号已存在,请重新输入')
        continue
    if len(pwd) != 6 or pwd.isdecimal() == False:  # 检查密码是否为6位纯数字
        print('密码不符号要求,请重新输入')
        continue
    if bal.replace('.','',1).isdecimal() == False:  # 检查余额是否合法
        print('余额输入错误,请重新输入')
        continue
    # 将信息保存到字典中
    userinfo[acc] = [name,pwd,float(bal)]
    print(userinfo)
    break

输入三个整数分别表示年、月、日,统计出这个日期为当年的第多少天

while True:
    y = input('年:')
    m = input('月:')
    d = input('日:')
    month_day = [31,28,31,30,31,30,31,31,30,31,30,31]  # 保存每个月的天数
    if (y + m + d).isdecimal() and (y := int(y)) and 1 <= (m := int(m)) <= 12 and 1 <= (d := int(d)) <= 31:
        if m in (4, 6, 9, 11) and d == 31:  # 检查小月天数是否合法
            print('小月天数不能超过30')
            continue
        if y%4 == 0 and y%100 != 0 or y%400 == 0:  # 判断年份是否为闰年
            if m == 2 and d > 29:   # 检查闰年2月天数
                print('闰年2月天数不能超过29')
                continue
            month_day[1] = 29  # 将列表中第二个月的天数变为29
        else:
            if m == 2 and d > 28:   # 检查平年2月天数
                print('平年2月天数不能超过28')
                continue
        total = sum(month_day[:m-1])+d   # 计算总天数
        print(f'{y}年{m}月{d}日为{y}年的第{total}天')
        break
    else:
        print('输入错误,请输入正确的年、月、日')
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

佛系的老肖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值