Python学习笔记
文章目录
- Python学习笔记
- 第四站 往哪走
- 1. 程序的组织结构
- 2. 顺序结构
- 3. 对象的布尔值
- 4. 分支结构
- 5. pass空语句
- 6. 本章作业
课程笔记参考B站视频: Python全栈开发教程。
第四站 往哪走
1. 程序的组织结构
1996年,计算机科学家证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。
本章只介绍顺序结构和选择结构,循环结构将在下一章演示。
2. 顺序结构
顺序结构 就是程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束。下面是代码示例:
# 演示顺序结构
"""把大象放冰箱一共分几步?"""
print('--------程序开始----------')
print('1. 把冰箱门打开')
print('1. 把大象放进去')
print('1. 把冰箱门关上')
print('--------程序结束----------')
在某一行添加断点,然后点击小虫子(调试),即可进入到调试模式。
3. 对象的布尔值
Python一切皆对象,所有对象都有一个布尔值。要获取对象的布尔值,可以使用内置函数bool()
。除了以下对象的布尔值为False,其他对象的布尔值都为True:
False、数值0、None、空字符串、空列表、空元组、空字典、空集合。
下面是代码示例:
# 测试对象的布尔值
print('------以下对象的布尔值都为False-------')
print(bool(False)) # 布尔元素False
print(bool(0)) # 数值0
print(bool(0.0)) # 数值0
print(bool(None)) # None
print(bool('')) # 空字符串(双引号等也可以)
print(bool(list())) # 空列表
print(bool([])) # 空列表
print(bool(tuple())) # 空元组
print(bool(())) # 空元组
print(bool(dict())) # 空字典
print(bool({})) # 空字典
print(bool(set())) # 空集合
print('------其余对象的布尔值都为True-------')
print(bool(18))
- 运行结果
------以下对象的布尔值都为False-------
False
False
False
False
False
False
False
False
False
False
False
False
------其余对象的布尔值都为True-------
True
4. 分支结构
选择结构就是程序根据判断条件的布尔值选择性地执行部分代码,明确的让计算机知道在什么条件下,该去做什么。本节将主要介绍选择结构的语法。
1. 单分支if结构
单分支结构在中文语义中,就是 “如果满足…就…”。
下面是代码示例:
# 演示单分支结构
money = 1000 # 余额
drawback = int(input('请输入取款金额 '))
# 判断余额是否充足
if money>=drawback:money -= drawbackprint('取款成功,余额为', money)
2. 双分支if…else结构
双分支结构在中文语义中,就是 “如果满足…就…,若不满足…就…”。
下面是代码示例:
print('----------运行奇偶判断器-----------')
num = int(input('请输入一个整数:'))
if num%2:print(num, '为奇数')
else:print(num, '为偶数')
print('------------判断完成--------------')
注意到最后一个print()
和谁对齐就属于那哪个结构,也就是说,Python是一个靠对齐划分结构块的语言。
3. 多分支if…elif…else结构
在双分支结构的基础上,若再增加判断条件及后续行为,即为多分支结构。多分支结构中的最后一个else
可以不写。
下面是代码示例:
print('-----------运行成绩转换器-----------')
print('--作用:将百分制成绩转换成五分制成绩---')
score = float(input('请输入百分制成绩:'))
if score>=90 and score<=100:print('成绩为:A')
elif 80<=score<90:print('成绩为:B')
elif 70<=score<80:print('成绩为:C')
elif 60<=score<70:print('成绩为:D')
elif 0<=score<60:print('成绩为:E')
else:print('输入成绩不在范围内:', score)
print('--------------运行结束-------------')
注意到上述判断条件,Python可以将两个与的条件写成连续比较的格式。
另外,Python没有switch/case语句。为了达到这种分支语句的效果,一般方法是使用字典映射,具体可以参考 Python为什么没有switch/case语句?。
4. If语句的嵌套
if嵌套的意思就是在某一个条件中又执行了一次条件判断。
下面是代码示例:
note = """超市打折说明:
会员: >= 200 8折>= 100 9折其他不打折
非会员: >= 200 9.5折其他不打折"""
print(note)
print('--------运行超市打折计算程序-------')
ident = input('这位顾客是会员吗?y/n:')
if ident!='Y' and ident!='y' and ident!='N' and ident!='n':print('顾客身份确认错误:', ident)
else:points = float(input('请输入当前购物金额:'))if ident=='y' or ident=='Y':if points>=200:print('请给这位尊贵的会员打8折,消费' + "%.2f"%(points*0.8) + '元')elif 100<=points<200:print('请给这位尊贵的会员打9折,消费' + "%.2f"%(points*0.9) + '元')elif 0<=points<100:print('抱歉不能打折,消费' + "%.2f"%points + '元')else:print('购物金额输入错误:', points)elif ident=='n' or ident=='N':if points>=200:print('请给这位顾客打9.5折,消费' + "%.2f"%(points*0.95) + '元')elif 0<=points<200:print('抱歉不能打折,消费' + "%.2f"%points + '元')else:print('购物金额输入错误:', points)
print('-------------运行结束------------')
5. 条件表达式
条件表达式是if…else…的简写,语法结构为:
x if 判断条件 else y
运算规则是如果判断条件的布尔值为True,条件表达式的返回值为x
,否则条件表达式的返回值为y
。
下面是代码示例:
print('演示条件表达式的使用:')
print('---------运行大小比较器----------')
num_a = float(input('请输入第一个数:'))
num_b = float(input('请输入第二个数:'))
print(str(num_a)+' ≥ '+str(num_b) if num_a>=num_b else str(num_a)+' < '+str(num_b))
print('------------运行结束------------')
注意,上述这个用法就是Python中的三元运算符。
5. pass空语句
pass语句没有实际的执行操作,只是一个占位符,用在语法上需要语句的地方。使用场景:
先搭建语法结构,还没想好代码怎么写的时候。
可以使用pass()语句的结构有:
- if语句的条件执行体
- for-in语句的循环体
- 定义函数时的函数体
下面是代码示例:
# 演示pass的使用
answer = input('吃了吗?y/n:')
if answer=='y':pass
else:pass
# 上面这样写不会出现语法报错
注:弹幕中有人说这个语句的作用是“合理的交白卷”,我觉得言之有理😂。
6. 本章作业
1. 支付密码格式验证
说明:
检测输入的字符,若全为数字,显示“支付密码合法”
否则显示“支付数字不合法,支付密码只能是数字”
下面是代码示例:
pwd = input('请输入支付密码:')
print('方法一:使用if...else'.center(25,'-'))
if pwd.isdigit():print('支付数据合法')
else:print('支付数据不合法!支付密码只能是数字')
print('方法二:使用条件表达式'.center(25,'-'))
print('支付数据合法' if pwd.isdigit() else '支付数据不合法!支付密码只能是数字')
- 运行结果
请输入支付密码:888a
-----方法一:使用if...else-----
支付数据不合法!支付密码只能是数字
--------方法二:使用条件判断-------
支付数据不合法!支付密码只能是数字
下面给出了三种字符串判断数字的方法的区别(参考文章 “Python中isdigit()和isnumeric()的区别”):
isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无
isdecimal()
True: Unicode数字,,全角数字(双字节)
False: 罗马数字,汉字数字
Error: byte数字(单字节)
isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)
2. 模拟QQ账号登录
说明:
读取用户输入的用户名和密码,若匹配,显示“登录成功”
否则显示“用户名和密码不匹配”
下面是老师的代码示例:
qq=input('请输入QQ号:')
pwd=input('请输入密码:')
if qq=='296626472' and pwd=='123':print('登录成功')
else:print('对不起,账号或密码不正确')
- 运行结果
请输入QQ号:296626472
请输入密码:123
登录成功
3. 商品价格大竞猜
说明:
输出“今日战机为玄女号,价格在[10000-15000]贡献点之间,请竞猜:”
然后不断显示“大了”、“小了”,直到战机价格匹配显示“猜对了”
本作业的难点在于随机数的生成,下面直接看代码示例:
import random
def in_value():while True:try:value = int(input('今日战机为玄女号,价格在[0-100]贡献点之间,请竞猜:'))except:print('输入错误!',end='')else:breakreturn value
value = in_value()
value_true = random.randint(0,100)
while value_true!=value:if value_true>value:print('猜小了!')else:print('猜大了!')value = in_value()
else:print('你猜对了!然而无事发生...')
- 运行结果就不放了。
4. 根据星座查看运势
示例:
下面是代码示例:
dic_star = {'白羊座': '''本月贵人星座: 水瓶座
本月小人星座: 双鱼座
本月需要特别关注的日子: 4日、5日、10日、16日、24日
本月DO: 满足自己的情绪需求,改善长期压抑的心情。
本月DON’T: 切勿在冲动之下做决定,三月仍是适合“以静制动”的阶段。''','金牛座': '''本月贵人星座: 金牛座
本月小人星座: 白羊座
本月需要特别关注的日子: 4日、5日、10日、22日、31日
有月DO: 关注情绪需求,留意与未来有关的目标。
本月DON’T: 信任自己的能力,切勿轻信他人的承诺。'''
}
print('注:只能演示白羊座、金牛座。')
in_star = input('请输入你的星座:')
# print(dic_star[in_star]) # 不推荐,有可能会报错
print(dic_star.get(in_star)) # 推荐,及时获取不到也不会报错
- 运行结果
注:只能演示白羊座、金牛座。
请输入你的星座:546
None