欢迎回来!在之前的学习中,我们已经掌握了程序的基本计算与数据处理能力。但你是否注意到一个关键问题?
目前所有数据都是直接写在代码中的——无论是姓名、年龄还是成绩,每次修改都需要改动源码。这就像去餐厅吃饭,菜单早已被厨师定好,根本没有选择的余地。
为了让程序真正具备交互性,今天我们将学习如何让程序“听”到用户的声音,并根据输入做出智能决策。核心内容包括:用户输入获取、条件判断机制以及逻辑控制结构的应用。
该函数是Python中用于接收用户键盘输入的核心工具,它使得程序能够暂停运行并等待用户的输入信息,从而开启基本的交互功能。
input()
基本语法示例:
# 最简单的输入
name = input("请输入你的姓名:")
print("你好," + name + "!")
# 运行结果:
# 请输入你的姓名:小明
# 你好,小明!
关键特性说明:
# input() 获取的永远是字符串类型
age = input("请输入你的年龄:")
print("age的类型是:", type(age)) # 输出:<class 'str'>
# 如果想要进行数学计算,需要先转换类型
age_number = int(age)
print("明年你就" + str(age_number + 1) + "岁了")
这个内置函数可以返回一个字符串包含的字符总数,常用于验证输入长度或判断内容是否为空。
# len() 函数可以计算字符串的长度(包含多少个字符)
name = "张三"
print("姓名长度:" + str(len(name))) # 输出:2
# 计算用户输入的密码长度
password = input("请设置密码:")
password_length = len(password)
print("你设置的密码长度是:" + str(password_length))
# 计算句子的长度
sentence = "我喜欢学习Python编程"
print("句子长度:" + str(len(sentence))) # 输出:10
# 空字符串的长度是0
empty_string = ""
print("空字符串长度:" + str(len(empty_string))) # 输出:0
实际应用场景演示:
# 简单的用户注册
print("=== 用户注册 ===")
username = input("请输入用户名:")
password = input("请输入密码:")
email = input("请输入邮箱:")
print("\n注册成功!")
print("用户名:" + username)
print("密码:" + "*" * len(password)) # 用*号隐藏密码
print("邮箱:" + email)
在深入条件控制前,必须理解布尔类型的概念。所有的条件表达式最终都会归结为两个结果之一:True 或 False,它们构成了程序“思考”的基础。
True
False
布尔值的生成方式:
# 比较运算会产生布尔值
age = 20
print(age >= 18) # 输出:True
print(age < 10) # 输出:False
# 检查相等性也会产生布尔值
name = "小明"
print(name == "小明") # 输出:True
print(name == "小红") # 输出:False
# 布尔值可以直接用在条件判断中
is_sunny = True
if is_sunny:
print("今天天气晴朗,可以出去玩!")
这些符号用来判断两个值之间的关系,如大小、相等与否等,其结果始终是一个布尔值。
# 等于 ==
print("5 == 5:", 5 == 5) # True
print("5 == 3:", 5 == 3) # False
# 不等于 !=
print("5 != 3:", 5 != 3) # True
print("5 != 5:", 5 != 5) # False
# 大于 >
print("5 > 3:", 5 > 3) # True
print("3 > 5:", 3 > 5) # False
# 小于 <
print("3 < 5:", 3 < 5) # True
print("5 < 3:", 5 < 3) # False
# 大于等于 >=
print("5 >= 5:", 5 >= 5) # True
print("5 >= 3:", 5 >= 3) # True
# 小于等于 <=
print("3 <= 3:", 3 <= 3) # True
print("3 <= 5:", 3 <= 5) # True
字符串间的比较规则:
# 字符串也可以比较(按字典顺序)
name = input("请输入姓名:")
print("姓名是张三吗?", name == "张三")
print("姓名不是李四吗?", name != "李四")
# 检查密码长度
password = input("设置密码:")
print("密码长度合格:", len(password) >= 6)
小贴士: 字符串比较遵循编码顺序原则(如 ASCII 或 Unicode),逐字符对照,类似于字典排序方式。对于中文字符,则依据 UTF-8 编码表进行比对。
# 核心规则:字典序比较
# 字符串比较是从左到右,逐个字符进行比较。
# 1. 比较第一个字符:
# ○ 如果第一个字符的编码值不同,那么编码值较大的字符串就被认为是较大的。比较立即结束。
# ○ 如果第一个字符的编码值相同,则继续比较下一个字符。
# 2. 比较后续字符:
# ○ 重复步骤1,直到找到两个不相等的字符,或者其中一个字符串没有更多字符可比较。
# 3. 处理字符串长度不同:
# ○ 如果两个字符串在前 min(length1, length2) 个字符都完全相同,那么长度更长的字符串被认为是较大的。
# ○ 空字符串 被认为是最小的。
# 小写字母 > 大写字母 > 数字
# 'a' < 'b' ...
# 'A' < 'B' ...
# '1' < '2' ....
当需要同时满足或部分满足多个条件时,就需要使用逻辑运算符来组合判断条件,构建更复杂的决策路径。
and(与)操作: 要求所有条件同时成立,如同电路中总开关与分开关都需打开才能通电。
# 年龄大于等于18 并且 有身份证
age = int(input("请输入年龄:"))
has_id = input("是否有身份证?(有/没有)") == "有"
# 两个条件都必须满足
can_drive = age >= 18 and has_id
print("可以考驾照:", can_drive)
or(或)操作: 只要有一个条件成立即可,例如前门或后门的门铃任意按下都会响铃。
# 是周末 或者 是节假日
is_weekend = input("今天是周末吗?(是/否)") == "是"
is_holiday = input("今天是节假日吗?(是/否)") == "是"
# 只要一个条件满足就可以
can_rest = is_weekend or is_holiday
print("今天可以休息:", can_rest)
not(非)操作: 对结果取反,比如夜灯在“非白天”状态下自动开启。
# 不下雨
is_rain = input("下雨了吗?(是/否)") == "是"
# 对条件取反
can_play = not is_rain
print("可以出去玩:", can_play)
复合逻辑表达式(注意括号优先级最高):
# 复杂的条件组合
age = int(input("请输入年龄:"))
is_weekend = input("是周末吗?(是/否)") == "是"
has_ticket = input("有票吗?(有/没有)") == "有"
# 年龄大于12岁,并且(是周末或者有票)
can_watch_movie = age > 12 and (is_weekend or has_ticket)
print("可以看电影:", can_watch_movie)
掌握了前面的基础知识后,我们现在可以正式进入条件控制的学习,使程序能根据不同情况执行不同代码块。
# 最简单的if判断
age = int(input("请输入你的年龄:"))
if age >= 18: # 条件
print("你已经是成年人了!") #满足条件才执行
# 如果...否则...
age = int(input("请输入你的年龄:"))
if age >= 18: # 条件
print("欢迎进入成人世界!") # 满足条件执行
else:
print("你还是个孩子呢!") # 不满足条件执行
# 多个条件判断
score = int(input("请输入你的考试成绩:"))
if score >= 90:
print("优秀!太棒了!") # 满足条件score >= 90执行后,不会执行其他的条件判断
elif score >= 80:
print("良好!继续努力!") # 满足条件score >= 80执行后,不会执行其他的条件判断
elif score >= 60:
print("及格!加油哦!") # 满足条件score >= 60执行后,不会执行其他的条件判断
else:
print("不及格!要努力了!") # 以上条件都不满足,执行
重要特点总结:
if-elif-else
某些情况下,我们需要在某个条件成立的前提下进一步细分判断,这就需要用到嵌套结构。
# 嵌套if示例:电影票购买系统
age = int(input("请输入你的年龄:"))
has_money = input("带钱了吗?(是/否)") == "是"
if age >= 12: # 外层判断:年龄是否符合
if has_money: # 内层判断:是否带钱
print("可以购买电影票!")
movie_type = input("想看2D还是3D电影?")
if movie_type == "3D": # 更深层的判断
print("3D电影需要额外支付10元")
else:
print("2D电影价格正常")
else:
print("年龄符合,但没带钱,无法购票")
else:
print("年龄太小,不适合观看")
更复杂的嵌套实例:
# 成绩评级系统
score = int(input("请输入考试成绩:"))
if score >= 60: # 外层:是否及格
print("恭喜你及格了!")
if score >= 90: # 内层:优秀等级
print("你的等级是:优秀")
if score == 100: # 更深层:满分特别表扬
print("太厉害了!满分!")
elif score >= 80: # 内层:良好等级
print("你的等级是:良好")
else: # 内层:及格等级
print("你的等级是:及格")
else: # 外层:不及格
print("很遗憾,不及格")
if score >= 50:
print("差一点就及格了,下次加油!")
else:
print("需要加倍努力了!")
编写建议:
# 使用逻辑运算符简化嵌套
age = int(input("年龄:"))
has_money = input("带钱了吗?(是/否)") == "是"
# 原来的嵌套写法
if age >= 12:
if has_money:
print("可以购票")
# 使用and简化的写法
if age >= 12 and has_money:
print("可以购票")
现在我们将 input() 输入与条件判断结合,开发一个实用的小应用——智能电影推荐引擎。通过用户的年龄、偏好等输入,动态推荐适合的影片类型。
# 综合实战:智能电影推荐系统
print("=== 智能电影推荐系统 ===")
print("你好!让我根据你的情况推荐适合的电影吧!")
# 获取用户信息
age = int(input("首先,请问你今年多大了?"))
movie_type = input("你喜欢什么类型的电影?(动作/喜剧/科幻/动画):")
is_weekend = input("今天是周末吗?(是/否):") == "是"
print("\n=== 推荐结果 ===")
# 外层判断:根据年龄推荐适合的电影分级
if age < 8:
print("小朋友,推荐观看:")
if movie_type == "动画":
print(" - 《小猪佩奇大电影》")
print(" - 《熊出没之重返地球》")
else:
print(" - 所有G级(普通级)动画片")
elif age < 13:
print("小朋友,推荐观看:")
if movie_type == "动画":
print(" - 《疯狂动物城》")
print(" - 《寻梦环游记》")
elif movie_type == "喜剧":
print(" - 《哈利波特》系列")
else:
print(" - PG级(建议家长指导)电影")
elif age < 18:
print("青少年,推荐观看:")
# 内层嵌套:结合电影类型和是否周末
if movie_type == "科幻":
if is_weekend:
print(" - 《阿凡达:水之道》(适合周末长时间观看)")
else:
print(" - 《星际穿越》(经典科幻)")
elif movie_type == "动作":
print(" - 《蜘蛛侠:英雄无归》")
print(" - 《速度与激情》系列")
else:
print(" - PG-13级(特别辅导级)电影")
else:
print("成年人,推荐观看:")
# 更复杂的嵌套判断
if movie_type == "科幻":
print(" - 《沙丘》系列")
if age >= 21:
print(" - 《银翼杀手2049》(深度科幻)")
elif movie_type == "动作":
print(" - 《007:无暇赴死》")
print(" - 《碟中谍》系列")
elif movie_type == "喜剧":
if is_weekend:
print(" - 《流浪地球2》(科幻喜剧)")
else:
print(" - 《这个杀手不太冷静》")
else:
print(" - 所有R级(限制级)电影")
# 额外的观影建议
print("\n=== 观影建议 ===")
if age < 13 and not is_weekend:
print("建议周末观看,保证充足休息时间")
elif age >= 18 and is_weekend:
print("周末愉快!可以观看长时间电影")
else:
print("享受观影时光!")
# 安全检查
print("\n=== 安全提醒 ===")
if age < 8:
print("???? 建议家长陪同观看")
elif age < 13:
if movie_type == "动作" or movie_type == "科幻":
print("???? 部分内容可能引起不适,建议家长指导")
else:
print("? 所有内容适合自主观看")
本节我们实现了程序的交互升级,掌握了一系列关键技能:
| 技能 | 作用 | 关键点 |
|---|---|---|
| input() 输入 | 获取用户输入 | 返回值始终为字符串,需手动转换类型 |
| len() 函数 | 计算字符串长度 | 返回字符个数,可用于空值检测 |
| 布尔值 | 条件判断的基础 | 仅 True 或 False,首字母大写 |
| 比较运算符 | 进行值的比较 | , , , , , |
| 逻辑运算符 | 组合多个条件 | , , |
| if 条件判断 | 按条件执行不同代码 | 合理搭配 if, elif, else |
| 嵌套 if 语句 | 实现多层次判断 | 注意缩进与层级控制 |
input()
len()
if
:
and
or
not
目前我们的程序已具备交互能力和基本决策功能。但如果遇到需要重复执行的任务——例如持续验证密码直到正确,或是批量处理多名学生的成绩——该如何应对?
在接下来的课程《告别重复劳动:循环语句让代码更高效》中,我们将学习 while 和 for 循环的使用方法,掌握自动化重复执行的技术,大幅提升编程效率。
请设计一个“智能登录系统”,要求用户输入用户名和密码,并进行以下校验:
len() 检查其长度是否大于0)
if username == "":
print("用户名不能为空")
else:
if len(password) < 6:
print("密码长度不能少于6位")
else:
if username == "admin" and password == "123456":
print("管理员登录成功")
elif username != "" and password != "":
print("普通用户登录成功")
else:
if username != "admin":
print("用户名错误")
if password != "123456":
print("密码错误")
程序首先判断用户名是否为空,若为空则提示“用户名不能为空”。
input()
当用户名不为空时,进入下一层判断,检查密码长度是否小于6位。若密码过短,则提示“密码长度不能少于6位”。
# 最简单的输入
name = input("请输入你的姓名:")
print("你好," + name + "!")
# 运行结果:
# 请输入你的姓名:小明
# 你好,小明!
在用户名和密码长度均符合要求的基础上,进一步判断是否为管理员账户。若用户名为"admin"且密码为"123456",则输出“管理员登录成功”。
对于其他非空的用户名和密码组合,默认视为普通用户,显示“普通用户登录成功”。
# input() 获取的永远是字符串类型
age = input("请输入你的年龄:")
print("age的类型是:", type(age)) # 输出:<class 'str'>
# 如果想要进行数学计算,需要先转换类型
age_number = int(age)
print("明年你就" + str(age_number + 1) + "岁了")
如果存在具体信息不符的情况,如用户名不是"admin"或密码错误,则分别指出对应的错误原因,确保反馈明确具体。
扫码加好友,拉您进群



收藏
