Python 编程1000例(6):打印成绩等级和出租车计费问题

本系列文章通过 1000(一篇文章表示 1 个实例) 个实例 ,为读者提供较为详细的练习题目,以便读者举一反三,深度学习。本系列的文章涉及到 Python 知识点包括:Python 语言基础、运算符和表达式、语句和程序结构、列表和元组、字典和集合、字符串、正则表达式、函数、面向对象编程、模块和包、异常处理和程序调试、文件和目录操作、数据库编程、界面编程、网络编程、WEB 编程、进程和线程、网络爬虫、游戏编程等知识点,由易到难,由浅入深,一步步打下坚实的编程基础。

本系列文章涉及的算法包括搜索、回溯、递归、排序、迭代、贪心、分治和动态规划等,涉及的数据结构包括字符串、列表、指针、区间、队列、矩阵、堆栈、链表、哈希表、线段树、二叉树、二叉搜索树和图结构等。

本系列文章是笔者为适应当前教育改革的创新要求,更好地践行语言类课程,满足实践教学与创新能力培养的需要,阅读大量书籍、各大互联网公司的面试算法、LintCode、LeetCode、九章算法和结合笔者近几年项目经验编写的系列文章,精选了 1000 个趣味性、实用性强的应用实例,从不同难度、不同算法、不同类型和不同数据结构等方面,将实际算法进行总结,希望为 Python 编程人员抛砖引玉。由于笔者经验与水平有限,博文中疏漏及不妥之处在所难免,衷心地希望各位读者在评论区多提宝贵意见及具体的修改建议,以便笔者进一步修改和完善。

一、设计条件运算

使用逻辑运算可以替代条件语句执行条件运算。
【示例1】设计一个简单的条件语句,选择最大值。

a, b = 10, 20
if a > b:  # 比较大小,提取最大值
    c = a
else:
    c = b
print(c)  # 输出为20

使用逻辑运算来实现示例1,代码如下:

a, b = 10, 20
c = (a > b and [a] or [b])[0]
# 使用三目运算符改写:c = a if a > b else b
# 使用列表结构来模拟条件表达式:c = [20, 10][a > b] ==> [b,a][False]
# False转换为0,所以[20,10][0]  # 也就是20
print(c)  # 输出20

下面对表达式 (a > b and [a] or [b])[0] 进行逻辑解析:

  1. a > b and [a] or [b] 表达式可以转换为 False and [10] or [20] 。该表达式中a、b 外的中括号的作用是什么?因为 a 和 b 可能为假值,如果 a 的值为0,转换为布尔值就是 False,则条件表达式就会被破坏。也就是说,不管 a > b 是否为 True,b 都将被运算。而可变数据只有为空时,转换为布尔值才为 False。0转换为布尔值为 False,但是 [0] 转换为布尔值为 True。
  2. 因为 and 的优先级高于 or,先执行 and 运算。
  3. False 与 [10] 进行 and 运算之后,返回 False。
  4. 返回的 False 再与 [20] 进行 or 运算,返回 [20]。
  5. 通过中括号语法读取元素值即可。

如果 True 和 [10] 进行 and 运算,则返回 [10]。然后 [10] 和 [20] 进行 or 运算,不为空的数列 [10] 转换为布尔值总是为 True,所以直接返回 [10],就不再运算 [20]。可以看到,False 和 True 与其他表达式做布尔运算时,将根据是 and 运算,还是 or 运算,False 和 True 的位置在前还是在后,会有不同的运算顺序。

【示例2】使用多条件语句设计用户管理模块,对用户身份进行判断。

level = int(input("请输入你的级别:"))
if level == 1:
    print("游客")
elif level == 2:
    print("普通会员")
elif level == 3:
    print("高级会员")
elif level == 4:
    print("管理员")
else:
    print("无效输入")

示例2使用逻辑运算来进行设计,则实现代码如下:

level = int(input("请输入你的级别:"))
level_str = (level == 1 and ["游客"] or level == 2 and ["普通会员"]
             or level == 3 and ["高级会员"] or level == 4 and ["管理员"] or ["无效输入"])[0]
print(level_str)

但是我们可以看到这种写法可读性并不强并且对一些基础不是很好的编程者来讲不是那么友好,所以建议读者在条件较多的情况下,我们还是采用条件语句来进行程序的编写,结构比较清晰,且易于维护。

二、打印成绩等级

需求:输入一个百分制成绩,要求输出成绩等级 A、B、C、D、E。90 分以上为 A,80~89 分为 B,70~79分为 C,60~69分为 D,60 分以下为 E。程序运行结果如下图所示:
在这里插入图片描述
示例代码1如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:14.打印成绩等级.py
@time:2021/01/21
"""

while True:
    score = int(input("请输入你的成绩:").strip())  # 输入百分制成绩
    if 0 <= score <= 100:  # 成绩符合规范
        if score >= 90:  # 成绩在90分以上
            print("你的成绩等级为A")
        elif score >= 80:  # 成绩在80分以上
            print("你的成绩等级为B")
        elif score >= 70:  # 成绩在70分以上
            print("你的成绩等级为C")
        elif score >= 60:  # 成绩在60分以上
            print("你的成绩等级为D")
        else:  # 成绩在60分以下
            print("你的成绩等级为E")
    else:
        print("你输入的成绩不符合规范!")

示例代码2如下:

while True:
    score = int(input("请输入你的成绩:").strip())  # 输入百分制成绩
    if 0 <= score <= 100:  # 成绩符合规范
        if score < 60:
            print("你的成绩等级为E")
        elif score < 70:
            print("你的成绩等级为D")
        elif score < 80:
            print("你的成绩等级为C")
        elif score < 90:
            print("你的成绩等级为B")
        else:
            print("你的成绩等级为A")
    else:
        print("你输入的成绩不符合规范!")

三、出租车计费问题

需求:假设某城市的出租车计费方式为:起步 2 千米内 5 元,2 千米以上每千米收费 1.3 元,9 千米以上每千米收费 2 元,不足 1 千米的算 1 千米,燃油附加费 1 元。编写程序,输入千米数,计算出行所需的出租车费用。
在这里插入图片描述
示例代码如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:13.出租车计费问题.py
@time:2021/01/21
"""
import math  # 导入 math函数

distance = math.ceil(float(input("请输入行驶路程:")))  # 向上取整千米数
cost = 0  # 定义费用
if distance >= 0:  # 出租车要么走要么没走 所以距离肯定是>=0的
    if distance <= 2:  # 2千米内,
        cost = 5 + 1  # 计算费用 1:燃油附加费
    elif distance <= 9:  # 2千米以上,9千米以内
        cost = 5 + (distance - 2) * 1.3 + 1  # 计算费用
    else:  # 9千米以上
        cost = 5 + (9 - 2) * 1.3 + (distance - 9) * 2 + 1  # 计算费用
    print(f"需要的费用为:{cost}")
else:
    print("输入的数据不符合规范!")  # 千米数不合法

程序运行结果如下:
在这里插入图片描述

感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
 编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

猜你喜欢

转载自blog.csdn.net/xw1680/article/details/112971306
今日推荐