全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
156 0
2025-12-01

欢迎回来!在之前的学习中,我们已经掌握了程序的基本计算与数据处理能力。但你是否注意到一个关键问题?

目前所有数据都是直接写在代码中的——无论是姓名、年龄还是成绩,每次修改都需要改动源码。这就像去餐厅吃饭,菜单早已被厨师定好,根本没有选择的余地。

为了让程序真正具备交互性,今天我们将学习如何让程序“听”到用户的声音,并根据输入做出智能决策。核心内容包括:用户输入获取、条件判断机制以及逻辑控制结构的应用。

1. input()函数:实现人机对话的第一步

该函数是Python中用于接收用户键盘输入的核心工具,它使得程序能够暂停运行并等待用户的输入信息,从而开启基本的交互功能。

input()

基本语法示例:

# 最简单的输入
name = input("请输入你的姓名:")
print("你好," + name + "!")

# 运行结果:
# 请输入你的姓名:小明
# 你好,小明!

关键特性说明:

# input() 获取的永远是字符串类型
age = input("请输入你的年龄:")
print("age的类型是:", type(age))  # 输出:<class 'str'>

# 如果想要进行数学计算,需要先转换类型
age_number = int(age)
print("明年你就" + str(age_number + 1) + "岁了")

2. len()函数:测量字符串的字符数量

这个内置函数可以返回一个字符串包含的字符总数,常用于验证输入长度或判断内容是否为空。

# 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)

3. 布尔值:构成判断逻辑的基石

在深入条件控制前,必须理解布尔类型的概念。所有的条件表达式最终都会归结为两个结果之一:TrueFalse,它们构成了程序“思考”的基础。

  • 只有两个取值: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("今天天气晴朗,可以出去玩!")

4. 比较运算符:进行数值与字符串对比的“标尺”

这些符号用来判断两个值之间的关系,如大小、相等与否等,其结果始终是一个布尔值。

# 等于 ==
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' ....

5. 逻辑运算符:连接多个条件的“逻辑桥梁”

当需要同时满足或部分满足多个条件时,就需要使用逻辑运算符来组合判断条件,构建更复杂的决策路径。

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)

6. if 条件语句:让程序具备“思考”能力

掌握了前面的基础知识后,我们现在可以正式进入条件控制的学习,使程序能根据不同情况执行不同代码块。

6.1 基础 if 语句

# 最简单的if判断
age = int(input("请输入你的年龄:"))

if age >= 18:	# 条件
    print("你已经是成年人了!")	#满足条件才执行

6.2 if-else 结构(二选一场景)

# 如果...否则...
age = int(input("请输入你的年龄:"))

if age >= 18:	# 条件
    print("欢迎进入成人世界!")	# 满足条件执行
else:
    print("你还是个孩子呢!")	# 不满足条件执行

6.3 if-elif-else 多分支选择

# 多个条件判断
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

6.4 嵌套 if:在判断中再做判断

某些情况下,我们需要在某个条件成立的前提下进一步细分判断,这就需要用到嵌套结构。

# 嵌套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("需要加倍努力了!")

编写建议:

  • 保持缩进清晰,每层 if 增加一级缩进
  • 避免嵌套过深,一般不超过三层
  • 复杂逻辑可拆分为独立函数提升可读性
  • 适当使用逻辑运算符简化嵌套层级
# 使用逻辑运算符简化嵌套
age = int(input("年龄:"))
has_money = input("带钱了吗?(是/否)") == "是"

# 原来的嵌套写法
if age >= 12:
    if has_money:
        print("可以购票")

# 使用and简化的写法
if age >= 12 and has_money:
    print("可以购票")

7. 综合实战项目:打造智能电影推荐系统

现在我们将 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("? 所有内容适合自主观看")

8. 知识点回顾与总结

本节我们实现了程序的交互升级,掌握了一系列关键技能:

技能 作用 关键点
input() 输入 获取用户输入 返回值始终为字符串,需手动转换类型
len() 函数 计算字符串长度 返回字符个数,可用于空值检测
布尔值 条件判断的基础 仅 True 或 False,首字母大写
比较运算符 进行值的比较
==
,
!=
,
>
,
<
,
>=
,
<=
逻辑运算符 组合多个条件
and
,
or
,
not
if 条件判断 按条件执行不同代码 合理搭配 if, elif, else
嵌套 if 语句 实现多层次判断 注意缩进与层级控制

核心要点提炼:

  • 通过 input() 获取的数据永远是字符串类型,参与数学运算前务必进行类型转换
  • len() 可以准确统计字符串中的字符数量
  • 所有比较操作的结果均为布尔值(True/False)
  • if、elif、else 语句后必须添加冒号(:)
  • 条件下的执行代码必须正确缩进
  • 利用 and、or、not 可构建复杂且灵活的判断逻辑
  • 嵌套 if 提升判断精度,但应控制深度以防代码混乱
input()
len()
if
:
and
or
not

下一讲预告

目前我们的程序已具备交互能力和基本决策功能。但如果遇到需要重复执行的任务——例如持续验证密码直到正确,或是批量处理多名学生的成绩——该如何应对?

在接下来的课程《告别重复劳动:循环语句让代码更高效》中,我们将学习 while 和 for 循环的使用方法,掌握自动化重复执行的技术,大幅提升编程效率。

动手实践任务

请设计一个“智能登录系统”,要求用户输入用户名和密码,并进行以下校验:

  • 用户名不能为空(可通过
    len()
    检查其长度是否大于0)
  • 密码长度不得少于6位字符
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"或密码错误,则分别指出对应的错误原因,确保反馈明确具体。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群