导航菜单

  • 1.VSCode开发
  • 2.什么是Python?
  • 3.请详细解释Python代码的执行过程
  • 4.请详细解释解释型语言与编译型语言的主要区别
  • 5.你知道哪些Python的编码规范?
  • 6.数据类型
  • 7.Python中如何声明多个变量并赋值
  • 8.Python有哪些内置数据结构
  • 9.!=和is not运算符有什么区别?
  • 10.进制
  • 11.编码
  • 12.print
  • 13.Python中break、continue、pass有什么作用?
  • 14.namedtuple有什么作用?
  • 15.Python的range函数如何运用?
  • 16.Python中join()和split()函数有什么区别?
  • 17.Python中如何将字符串转换为小写?
  • 18.Python中如何删除字符串中的前置空格?
  • 19.Python中如何使用索引反转字符串
  • 20.什么是Python的成员运算符?
  • 21.请详细说明Python中逻辑运算符(`and`、`or`、`not`)
  • 22.什么是Python的关系运算符?
  • 23.什么是Python的赋值和算术运算符?请详细说明赋值运算符、算术运算符的种类、使用方法、优先级规则。
  • 24.请详细解释Python中整数除法、取模运算和幂运算三个运算符。
  • 25.如何在Python中表示和转换不同进制的数字
  • 26.什么是Python的位运算符?
  • 27.请详细说明Python中三元表达式(Ternary Expression)的工作原理
  • 28.Python中如何实现switch语句?
  • 29.什么是Python的负索引?
  • 30.Python中如何实现字符串替换操作?
  • 31.Python中append、insert和extend有什么区别?
  • 32.请详细说明Python中`enumerate()`函数的作用
  • 33.Python中remove、del和pop有什么区别?
  • 34.Python中如何更改列表元素的数据类型?
  • 35.请详细说明Python中列表(list)和元组(tuple)的区别
  • 36.什么是Python元组的解封装?
  • 37.详细说明Python字典
  • 38.Python中KeyError、TypeError和ValueError有什么区别?
  • 39.请详细解释Python中`read()`、`readline()`和`readlines()`三种文件读取方法
  • 40.Python中iterable、iterator和generator的区别与联系
  • 41.Python中如何读取大文件?
  • 42.请详细解释Python中浅拷贝(shallow copy)和深拷贝(deep copy)的区别
  • 43.什么是Python的Lambda函数?
  • 44.Python中的reduce函数有什么作用?
  • 45.Python的zip函数有什么作用?
  • 46.请详细解释Python中`any()`和`all()`内置函数的作用
  • 47.为什么Python中没有函数重载?
  • 48.请介绍Python中变量的作用域(Scope)?
  • 49.什么是Python的闭包
  • 50.请详细说明Python中的内存管理机制
  • 51.请详细说明Python程序退出时内存的释放情况
  • 52.Python中是否有严格意义上的main函数?
  • 53.什么是Python的pickling和unpickling?
  • 54.什么是Python的猴子补丁(monkey patching)?
  • 55.什么是Python的鸭子类型(Duck Typing)
  • 56.什么是Python中的面向对象编程
  • 57.Python是否支持多重继承
  • 58.请详细说明Python3中装饰器的用法
  • 59.什么是Python中的模块和包?
  • 60.你使用过哪些Python标准库模块?
  • 61.你知道哪些Python魔术方法
  • 62.讲一下Python多线程、多进程和线程池
  • 63.如何分析Python代码的执行性能?
  • 64.pip
  • 65.pip-m
  • 67.uv
  • utf8
  • ast
  • dis
  • 尾递归
  • MethodType
  • 1. 进制转换与存储单位处理
    • 1.1 标题
    • 1.2 内容
      • 1.2.1 进制转换函数
      • 1.2.2 文件大小格式化函数
      • 1.2.3 下载时间计算函数
      • 1.2.4 测试用例
  • 2. 参考答案
    • 2.1 代码
    • 2.2 运行结果示例
    • 2.3 知识点覆盖

1. 进制转换与存储单位处理 #

1.1 标题 #

你正在开发一个文件管理工具,需要处理文件大小显示和网络下载时间计算。该工具需要支持不同进制的数据转换,并能准确处理存储单位和网络速度的单位换算。

1.2 内容 #

请实现以下三个函数:

1.2.1 进制转换函数 #

def convert_base(number_str, from_base, to_base):
    """
    进制转换函数

    参数:
        number_str: 数字字符串
        from_base: 源进制 (2-16)
        to_base: 目标进制 (2-16)

    返回:
        转换后的数字字符串

    示例:
        convert_base("255", 10, 16) -> "FF"
        convert_base("1010", 2, 10) -> "10"
    """

1.2.2 文件大小格式化函数 #

def format_file_size(size_bytes):
    """
    将字节数转换为人类可读的格式

    参数:
        size_bytes: 文件大小(字节)

    返回:
        格式化后的字符串,如 "1.50 KiB"

    要求:
        - 使用二进制前缀 (1024进制): B, KiB, MiB, GiB, TiB
        - 自动选择最合适的单位
        - 保留2位小数

    示例:
        format_file_size(1536) -> "1.50 KiB"
        format_file_size(1048576) -> "1.00 MiB"
    """

1.2.3 下载时间计算函数 #

def calculate_download_time(file_size_mb, bandwidth_mbps):
    """
    计算文件下载所需时间

    参数:
        file_size_mb: 文件大小(MB)
        bandwidth_mbps: 网络带宽(Mbps)

    返回:
        下载时间字符串,根据时间长短选择合适单位

    要求:
        - 正确进行单位换算(注意 Byte vs bit 的区别)
        - 小于1分钟显示秒,小于1小时显示分钟,否则显示小时
        - 保留1位小数

    示例:
        calculate_download_time(100, 50) -> "16.0 秒"
        calculate_download_time(2048, 100) -> "2.7 分钟"
    """

1.2.4 测试用例 #

# 测试数据
test_cases = [
    # 进制转换测试
    ("255", 10, 16),     # 应输出: "FF"
    ("1010", 2, 10),     # 应输出: "10"
    ("FF", 16, 2),       # 应输出: "11111111"

    # 文件大小测试
    (500,),              # 应输出: "500.00 B"
    (1536,),             # 应输出: "1.50 KiB"
    (1048576,),          # 应输出: "1.00 MiB"
    (3221225472,),       # 应输出: "3.00 GiB"

    # 下载时间测试
    (100, 50),           # 应输出: "16.0 秒"
    (2048, 100),         # 应输出: "2.7 分钟"
    (10240, 10),         # 应输出: "22.8 小时"
]

2. 参考答案 #

2.1 代码 #

# 定义进制转换函数
def convert_base(number_str, from_base, to_base):
    """
    进制转换函数

    参数:
        number_str: 数字字符串
        from_base: 源进制 (2-16)
        to_base: 目标进制 (2-16)

    返回:
        转换后的数字字符串
    """
    # 检查输入进制是否合法(2-16之间)
    if not (2 <= from_base <= 16 and 2 <= to_base <= 16):
        raise ValueError("进制必须在2-16之间")

    # 将输入数字字符串从原进制转换为十进制整数
    decimal_value = int(number_str, from_base)

    # 如果目标进制为10,直接返回对应的十进制字符串
    if to_base == 10:
        return str(decimal_value)

    # 定义一个内部函数,将十进制整数转换为任意目标进制字符串
    def int_to_base(n, base):
        # 如果数值为0,直接返回"0"
        if n == 0:
            return "0"
        # 进制表示的字符
        digits = "0123456789ABCDEF"
        result = ""
        # 逐步取余并拼接各位数字字符
        while n > 0:
            result = digits[n % base] + result
            n //= base
        return result

    # 返回最终目标进制的字符串
    return int_to_base(decimal_value, to_base)


# 定义文件大小格式化函数
def format_file_size(size_bytes):
    """
    将字节数转换为人类可读的格式

    参数:
        size_bytes: 文件大小(字节)

    返回:
        格式化后的字符串
    """
    # 文件大小不能为负数,抛出异常
    if size_bytes < 0:
        raise ValueError("文件大小不能为负数")

    # 定义文件大小单位(1024进制)
    units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']
    # 转换为浮点数便于计算
    size = float(size_bytes)

    # 初始化单位索引
    unit_index = 0
    # 循环计算合适的单位,同时缩小size
    while size >= 1024 and unit_index < len(units) - 1:
        size /= 1024.0
        unit_index += 1

    # 返回两位小数的格式化字符串和单位
    return f"{size:.2f} {units[unit_index]}"


# 定义下载时间计算函数
def calculate_download_time(file_size_mb, bandwidth_mbps):
    """
    计算文件下载所需时间

    参数:
        file_size_mb: 文件大小(MB)
        bandwidth_mbps: 网络带宽(Mbps)

    返回:
        下载时间字符串
    """
    # 检查传入的文件大小和带宽都大于0
    if file_size_mb <= 0 or bandwidth_mbps <= 0:
        raise ValueError("文件大小和带宽必须大于0")

    # 文件大小从兆字节(MB)转换为兆比特(Mb):1 字节=8位
    file_size_mb_bits = file_size_mb * 8

    # 计算下载时间(秒)
    time_seconds = file_size_mb_bits / bandwidth_mbps

    # 根据总秒数判断选择合适的单位输出
    if time_seconds < 60:
        return f"{time_seconds:.1f} 秒"
    elif time_seconds < 3600:
        time_minutes = time_seconds / 60
        return f"{time_minutes:.1f} 分钟"
    else:
        time_hours = time_seconds / 3600
        return f"{time_hours:.1f} 小时"


# 进制转换测试用例
test_cases = [
    ("255", 10, 16, "FF"),
    ("1010", 2, 10, "10"),
    ("FF", 16, 2, "11111111")
]

# 遍历进制转换测试用例,分别调用转换函数并输出结果
for number, from_b, to_b, expected in test_cases:
    result = convert_base(number, from_b, to_b)
    print(f"{number} ({from_b}进制) -> {result} ({to_b}进制) [期望: {expected}]")

# 输出文件大小格式化测试分割线
print("\n=== 文件大小格式化测试 ===")

# 文件大小格式化测试用例
size_tests = [500, 1536, 1048576, 3221225472]
# 遍历文件大小测试用例,格式化并输出结果
for size in size_tests:
    result = format_file_size(size)
    print(f"{size:,} 字节 -> {result}")

# 输出下载时间计算测试分割线
print("\n=== 下载时间计算测试 ===")

# 下载时间计算测试用例
download_tests = [
    (100, 50, "16.0 秒"),
    (2048, 100, "2.7 分钟"),
    (10240, 10, "2.3 小时")
]

# 遍历下载时间测试用例,调用计算函数并输出结果
for file_size, bandwidth, expected in download_tests:
    result = calculate_download_time(file_size, bandwidth)
    print(f"{file_size} MB, {bandwidth} Mbps -> {result} [期望: {expected}]")

2.2 运行结果示例 #

255 (10进制) -> FF (16进制) [期望: FF]
1010 (2进制) -> 10 (10进制) [期望: 10]
FF (16进制) -> 11111111 (2进制) [期望: 11111111]

=== 文件大小格式化测试 ===
500 字节 -> 500.00 B
1,536 字节 -> 1.50 KiB
1,048,576 字节 -> 1.00 MiB
3,221,225,472 字节 -> 3.00 GiB

=== 下载时间计算测试 ===
100 MB, 50 Mbps -> 16.0 秒 [期望: 16.0 秒]
2048 MB, 100 Mbps -> 2.7 分钟 [期望: 2.7 分钟]
10240 MB, 10 Mbps -> 2.3 小时 [期望: 2.3 小时]

2.3 知识点覆盖 #

  1. 进制转换:int()函数的base参数使用、自定义进制转换算法
  2. 存储单位:二进制前缀(KiB, MiB, GiB)vs 十进制前缀的区别
  3. 单位换算:Byte vs bit的区别(1 Byte = 8 bits)
  4. 网络速度:Mbps到MB/s的换算
  5. 格式化输出:数字格式化、单位选择
  6. 边界处理:参数验证、异常处理
  7. 实际应用:文件管理、网络下载等真实场景

访问验证

请输入访问令牌

Token不正确,请重新输入