python 基础之 控制结构 篇
文章目录
- 分支语句
- 循环语句
- for循环
- 控制结构语句
- 其他
- 练习题
分支语句
- 语法:
if 布尔表达式1: # if语句基本结构,描述了程序在布尔表达式结构为True的情况下程序需要执行的动作语句1......
elif 布尔表达式2: #可选的,指定程序在若干不同的条件下需要执行的动作语句1 # 如果布尔表达式1结构为False,则判断表达式2的结果是否为True,以此类推......
......
else: # 可选的,前面的所有布尔表达式都为False,则执行else中的动作语句1......
例1:输入1个字符,判断这个字符的类型(数字、大写字母、小写字母、符号)。提示:使用ord(obj)函数获取字符的ASCII值,根据ASCII值符判断其类型
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位小数)
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个数字
n = 0 # 循环控制变量
while n < 10: # 循环继续的条件n += 1 # 步长print(n) # 循环体
例2:输出1+2+…+99+100的和
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]范围内提示错误
n = 0 # 循环控制变量
s = 0 # 保存和
m = input('请输入10-20之间的整数:')
if m.isdecimal(): # 检查输入的内容是否为纯数字m = int(m)if 10 <= m <= 20: # 检查输入数字的范围是否在10-20之间while n < m: # 求和n += 1s += nprint(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 += 1s += nprint(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 += 1elif i.isupper(): # 检查是否为大写字母u += 1elif 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))breakelse: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:breakelse:print(i)for i in range(2,200):flag = 1for j in range(2,i):if i%j == 0:flag = 0breakif 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 *= iprint(f'{n}的阶乘为:{j}')
else:print('输入错误,请输入1个1-10的整数')
输入3个1-10之间的整数,分别表示三角形的三条边。判断这3条边能否构成三角形,如果能输出三角形的类型(普通三角形、等腰三角形、等边三角形、直角三角形,并且计算出三角形的面积(海伦公式)
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('账号已存在,请重新输入')continueif len(pwd) != 6 or pwd.isdecimal() == False: # 检查密码是否为6位纯数字print('密码不符号要求,请重新输入')continueif 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')continueif y%4 == 0 and y%100 != 0 or y%400 == 0: # 判断年份是否为闰年if m == 2 and d > 29: # 检查闰年2月天数print('闰年2月天数不能超过29')continuemonth_day[1] = 29 # 将列表中第二个月的天数变为29else:if m == 2 and d > 28: # 检查平年2月天数print('平年2月天数不能超过28')continuetotal = sum(month_day[:m-1])+d # 计算总天数print(f'{y}年{m}月{d}日为{y}年的第{total}天')breakelse:print('输入错误,请输入正确的年、月、日')
python 基础之 控制结构 篇相关推荐
- Python数据结构与算法(1.4)——Python基础之控制结构
Python数据结构与算法(1.4)--Python基础之控制结构 0. 学习目标 1. 代码块与缩进 2. 条件语句 2.1 if 语句 2.2 if 语句的嵌套 2.3 断言 3. 循环 3.1 ...
- Python基础语法入门篇(一)
Python基础语法入门篇(二) 1. 注释 在我们工作编码的过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当的添加注释,以辅助自己 或者其他编码人员解读代码. 注释是给程序员看的,为了 ...
- Python基础之控制结构
Python基础之控制结构 Python中控制结构分为分支结构与循环结构. 1.分支结构 (1) if 结构 适用于只有一种选择的时候 语法结构 if 条件 :代码操作 例: # 定义一个变量,存储一 ...
- python基础-第六篇-6.2模块
python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...
- python 基础第六篇
回顾上周所有内容 python基础 Python是一门解释型. 弱类型语言 print("内容", "内容", end="\n") 打印语句 ...
- python将姓王的都改成老王_老王Python基础+进阶+项目篇(高清无密)
老王Python教程 基础篇 基础篇1-福利课python先入为主上 基础篇2-福利课-python先入为主下篇 基础篇3-虚拟机安装xubuntu开发环境 基础篇4-linux基本命令以及开发环境 ...
- python 程序流程控制结构-Python基础—程序控制结构
程序控制结构 1.条件判断语句if...else 根据条件选择执行方向 单分支结构 if <条件>: <语句块> 二分支结构 if <条件>: <语句块> ...
- 史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏
网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧 爬虫(七十)多进程multiprocess(六十一) ...
- Python基础-程序控制结构
学习自马哥Python while while bool_expression:while_suite else:else_suite break:跳出最内层的循环 continue:跳到所处的最近层 ...
最新文章
- C#线程同步的几种方法
- 【数字信号处理】数字信号处理简介 ( 抽样定理 | 多抽样率 )
- 2021-11-16数据结构
- 基于mysql数据库binlog的增量订阅消费
- java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库
- 酱油和gbt酱油哪个好_酱油可不是越贵越好?看清瓶身上的5个字,教你1分钟买到好酱油...
- navigator.geolocation的应用 - 将定位信息显示在百度地图上
- 装逼神器,5 行 Python 代码 实现一键批量扣图,你get到了吗
- 装箱问题(洛谷-P1049)
- mysql pdo手册_灾难恢复 - [ MySql参考手册 ] - 在线原生手册 - php中文网
- Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)
- Imc手机连环画PC阅读器
- win32com 读取excel
- 如何将音频从视频分离到单独的音轨?
- kdj指标主要看哪个值_史上最全KDJ指标用法详解,学习KDJ指标看这一篇就够了
- k8s初始化报错[kubelet-check] Initial timeout of 40s passed.
- 如何给纸壳箱上装,#ps修图p图抠图视频教程小白入门基础课程
- javaFX 界面例子
- 【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
- 使用决策树算法预测西瓜的好坏
热门文章
- 机器学习驱动的语言测试
- android 大字体,大字体下载-大字体Big Font 3.21 安卓版-我游网
- 域控内使用策略部署和软件分发
- 华为服务器 远程虚拟控制 如何连接
- 《Linux C编程从入门到精通》一1.4 Linux的常用命令
- 2019年下半年教师资格幼儿园《保教知识与能力》真题与参考答案
- window 10 电脑有网,其他浏览器可以正常打开,谷歌浏览器无法打开如何解决。
- 钉钉新上线的「文字表情」功能--原来消息还可以这么回!
- Compose主题切换——让你的APP也能一键换肤
- 怎么用计算机截图快捷键,教您怎么使用电脑自带的截图快捷键