MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

Python if语句处理用户输入示例

2022-12-197.5k 阅读

Python if 语句基础

在Python编程中,if语句是实现条件控制流的基础结构。它允许程序根据特定条件的真假来决定执行哪一部分代码。if语句的基本语法如下:

if condition:
    # 当条件为真时执行的代码块
    statement

这里的condition是一个表达式,它的结果要么是True,要么是False。如果conditionTrue,则紧跟在if语句之后缩进的代码块(statement)将会被执行;如果conditionFalse,则代码块将被跳过。例如:

x = 10
if x > 5:
    print('x 大于 5')

在这个例子中,x > 5是条件表达式,由于x的值为10,该条件为True,所以print('x 大于 5')这行代码会被执行,输出结果为x 大于 5

复合条件

我们常常需要在if语句中使用多个条件。Python允许通过逻辑运算符(andornot)来组合条件。

  • and运算符:只有当and两边的条件都为True时,整个复合条件才为True。例如:
age = 25
is_student = True
if age > 18 and is_student:
    print('符合学生优惠条件')

在这个例子中,只有当age大于18且is_studentTrue时,才会输出符合学生优惠条件

  • or运算符:只要or两边的条件中有一个为True,整个复合条件就为True。例如:
score = 85
is_passed = False
if score > 60 or is_passed:
    print('考试通过')

这里只要score大于60或者is_passedTrue,就会输出考试通过

  • not运算符:用于取条件的反值。例如:
is_raining = False
if not is_raining:
    print('可以出门')

这里not is_raining表示如果is_rainingFalse,则条件为True,从而输出可以出门

获取用户输入

在Python中,可以使用input()函数获取用户的输入。input()函数会暂停程序的执行,等待用户在控制台输入文本,然后按下回车键。输入的内容会作为字符串返回。例如:

name = input('请输入你的名字:')
print('你好,', name)

运行这段代码时,程序会在控制台显示请输入你的名字:,等待用户输入。用户输入名字并回车后,程序会输出你好,[用户输入的名字]

处理数值输入

通常,我们获取到的用户输入是字符串类型。如果需要进行数值计算,就需要将字符串转换为数值类型。例如,要获取用户输入的年龄并进行判断:

age_str = input('请输入你的年龄:')
age = int(age_str)
if age >= 18:
    print('你是成年人')
else:
    print('你是未成年人')

这里先使用input()获取用户输入的年龄,返回的是字符串类型,通过int()函数将其转换为整数类型,然后进行年龄的判断。

错误处理

在将字符串转换为数值类型时,如果用户输入的不是有效的数值,会引发ValueError异常。为了提高程序的健壮性,我们可以使用try - except语句进行错误处理。例如:

while True:
    try:
        age_str = input('请输入你的年龄:')
        age = int(age_str)
        if age >= 18:
            print('你是成年人')
        else:
            print('你是未成年人')
        break
    except ValueError:
        print('输入无效,请输入一个有效的数字')

在这个例子中,使用while True创建一个无限循环,不断获取用户输入。在try块中尝试将用户输入转换为整数,如果转换失败,except ValueError块会捕获异常并提示用户输入无效,然后继续循环等待用户输入有效的数字。当用户输入有效数字时,通过break语句跳出循环。

使用if语句处理用户输入示例

简单的成绩判断

假设我们需要根据用户输入的成绩判断等级。90分及以上为A,80 - 89分为B,70 - 79分为C,60 - 69分为D,60分以下为F。

while True:
    try:
        score_str = input('请输入你的成绩:')
        score = int(score_str)
        if score >= 90:
            grade = 'A'
        elif score >= 80:
            grade = 'B'
        elif score >= 70:
            grade = 'C'
        elif score >= 60:
            grade = 'D'
        else:
            grade = 'F'
        print('你的成绩等级是:', grade)
        break
    except ValueError:
        print('输入无效,请输入一个有效的数字')

在这段代码中,通过if - elif - else结构根据不同的分数范围确定成绩等级。if语句首先判断是否大于等于90,如果不满足则依次通过elif判断其他分数范围,最后else处理60分以下的情况。

多条件用户身份判断

假设有一个系统,根据用户输入的年龄、是否为学生以及是否为会员来提供不同的服务。18岁及以上的学生会员享受高级服务,18岁及以上的非学生会员享受中级服务,18岁以下的会员享受基础服务,非会员则提示注册。

while True:
    try:
        age_str = input('请输入你的年龄:')
        age = int(age_str)
        is_student = input('你是学生吗?(yes/no)').lower() == 'yes'
        is_member = input('你是会员吗?(yes/no)').lower() == 'yes'
        if is_member:
            if age >= 18:
                if is_student:
                    print('你享受高级服务')
                else:
                    print('你享受中级服务')
            else:
                print('你享受基础服务')
        else:
            print('请注册成为会员以享受服务')
        break
    except ValueError:
        print('年龄输入无效,请输入一个有效的数字')

在这个示例中,首先获取用户输入的年龄、是否为学生以及是否为会员。然后通过多层嵌套的if语句进行判断。最外层判断是否为会员,对于会员再根据年龄和是否为学生细分服务类型,非会员则提示注册。

复杂的文件操作权限判断

假设我们有一个文件管理系统,用户输入用户名和操作类型(读、写、删除),系统根据用户权限判断是否允许操作。系统中有管理员(admin)拥有所有权限,普通用户根据配置文件决定权限。配置文件格式为每行一个用户名和权限,例如user1:read,write

def check_permission(username, operation):
    with open('permissions.txt', 'r') as file:
        for line in file:
            parts = line.strip().split(':')
            if parts[0] == username:
                permissions = parts[1].split(',')
                if operation in permissions:
                    return True
                else:
                    return False
    return False


while True:
    username = input('请输入用户名:')
    operation = input('请输入操作类型(读/写/删除):').lower()
    if username == 'admin':
        print('允许操作')
    else:
        if check_permission(username, operation):
            print('允许操作')
        else:
            print('权限不足')
    choice = input('是否继续操作?(yes/no)').lower()
    if choice != 'yes':
        break

在这段代码中,定义了check_permission函数来读取配置文件并检查用户权限。主程序中,首先获取用户输入的用户名和操作类型。如果用户名为admin,直接允许操作;否则调用check_permission函数判断权限。最后询问用户是否继续操作,如果用户输入不是yes,则退出循环结束程序。

游戏角色创建中的属性分配

在一个简单的游戏角色创建程序中,用户输入角色的类型(战士、法师、刺客),然后根据角色类型分配不同的初始属性。战士有高生命值和低魔法值,法师有高魔法值和低生命值,刺客有中等生命值和魔法值且敏捷较高。

while True:
    character_type = input('请选择角色类型(战士/法师/刺客):').lower()
    if character_type == '战士':
        health = 100
        magic = 20
        agility = 30
    elif character_type == '法师':
        health = 30
        magic = 100
        agility = 20
    elif character_type == '刺客':
        health = 60
        magic = 60
        agility = 80
    else:
        print('无效的角色类型,请重新选择')
        continue
    print('你的角色属性:')
    print('生命值:', health)
    print('魔法值:', magic)
    print('敏捷:', agility)
    choice = input('是否确认创建角色?(yes/no)').lower()
    if choice == 'yes':
        print('角色创建成功')
        break
    else:
        print('重新选择角色类型')

在这个示例中,通过if - elif - else结构根据用户选择的角色类型分配不同的属性值。如果用户输入无效的角色类型,提示重新选择并继续循环。用户确认创建角色后,输出角色创建成功并结束循环。

嵌套if语句与代码可读性

在处理复杂逻辑时,我们可能会使用嵌套的if语句。例如,在一个电商系统中,根据用户的会员等级和购物金额来判断是否给予折扣。普通会员购物金额满100元打9折,高级会员购物金额满50元打8折,超级会员无论购物金额多少都打7折。

while True:
    try:
        member_level = input('请输入会员等级(普通/高级/超级):').lower()
        amount_str = input('请输入购物金额:')
        amount = float(amount_str)
        if member_level == '普通':
            if amount >= 100:
                discount = 0.9
                final_amount = amount * discount
                print('你享受9折优惠,最终金额为:', final_amount)
            else:
                print('购物金额不足,不享受折扣')
        elif member_level == '高级':
            if amount >= 50:
                discount = 0.8
                final_amount = amount * discount
                print('你享受8折优惠,最终金额为:', final_amount)
            else:
                print('购物金额不足,不享受折扣')
        elif member_level == '超级':
            discount = 0.7
            final_amount = amount * discount
            print('你享受7折优惠,最终金额为:', final_amount)
        else:
            print('无效的会员等级')
        break
    except ValueError:
        print('金额输入无效,请输入一个有效的数字')

虽然嵌套if语句能够实现复杂逻辑,但过多的嵌套会降低代码的可读性。为了改善这一点,可以考虑将部分逻辑封装成函数,或者使用if - elif - else结构替代部分嵌套。例如,我们可以将计算折扣的逻辑封装成函数:

def calculate_discount(member_level, amount):
    if member_level == '普通':
        if amount >= 100:
            return 0.9
        else:
            return 1
    elif member_level == '高级':
        if amount >= 50:
            return 0.8
        else:
            return 1
    elif member_level == '超级':
        return 0.7
    else:
        return 1


while True:
    try:
        member_level = input('请输入会员等级(普通/高级/超级):').lower()
        amount_str = input('请输入购物金额:')
        amount = float(amount_str)
        discount = calculate_discount(member_level, amount)
        if discount != 1:
            final_amount = amount * discount
            print('你享受{}折优惠,最终金额为:'.format(int(discount * 10)), final_amount)
        else:
            print('不享受折扣')
        break
    except ValueError:
        print('金额输入无效,请输入一个有效的数字')

这样,主程序的逻辑更加清晰,将复杂的折扣计算逻辑封装在calculate_discount函数中,提高了代码的可读性和可维护性。

总结if语句处理用户输入要点

  1. 条件判断基础:熟练掌握if语句的基本语法,包括简单条件和复合条件的判断。理解逻辑运算符andornot的使用,能够准确组合多个条件进行复杂判断。
  2. 用户输入获取与转换:使用input()函数获取用户输入,并根据需求将字符串类型的输入转换为合适的数据类型,如整数、浮点数等。同时要注意错误处理,防止因用户输入无效数据导致程序崩溃。
  3. 复杂逻辑处理:在处理复杂逻辑时,可以使用嵌套if语句,但要注意代码的可读性。可以通过封装函数、优化条件结构等方式提高代码的可维护性。
  4. 交互设计:在与用户交互的过程中,要提供清晰的提示信息,引导用户输入正确的数据,并对用户的输入做出合理的反馈,提升用户体验。

通过不断练习和实践,能够更加熟练地运用if语句处理各种用户输入场景,编写出健壮、高效且用户友好的Python程序。