You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成器实现偶数位反转密码功能报错求助

Python生成器函数reverse_number的问题排查与修正

需求回顾

编写生成器函数reverse_number(number),实现以下功能:

  • 提取输入数字的偶数位数字(指数字本身为偶数)并反转,输出格式为Your new password is: [结果]
  • 若输入满足任一条件,输出Invalid input:
    1. 数字少于2位
    2. 数字为负数
    3. 数字全为0
  • 必须使用yield实现生成器,禁止用return返回结果

测试报错提示:

Fail 1 :: The values in the generator object returned by the 'reverse_number' method are not correct. Check the name and logic of the function

原代码问题分析

原代码存在几个核心问题:

  1. 合法性判断重复且不完整
    • 主逻辑仅判断number <10,未覆盖负数场景;生成器内部重复判断合法性,导致逻辑冗余且冲突
    • 处理负数时,str(number)会包含负号,遍历反转时转换int(digit)会抛出ValueError
  2. 生成器职责混淆
    • 生成器同时返回错误信息和有效结果,导致''.join()处理后结果格式不一致,违背生成器专注产出有效数据的设计逻辑
  3. 全0判断场景覆盖不足
    • 输入为0时虽能被拦截,但逻辑可以更简洁统一

修正后的代码

def reverse_number(number):
    # 仅处理合法数字,生成反转后的偶数位字符
    for digit in reversed(str(abs(number))):
        num_digit = int(digit)
        if num_digit % 2 == 0:
            yield digit

number = int(input("Please enter the number: "))

# 统一合法性判断
is_invalid = False
if number < 0:
    is_invalid = True
elif abs(number) < 10:
    is_invalid = True
elif all(char == '0' for char in str(abs(number))):
    is_invalid = True

if is_invalid:
    print("Invalid input")
else:
    result = ''.join(reverse_number(number))
    print(f"Your new password is: {result}")

修正说明

  1. 统一合法性判断到主逻辑
    • 集中处理所有非法场景(负数、少于2位、全0),避免生成器处理错误输入
  2. 生成器专注业务逻辑
    • 通过abs(number)获取数字的绝对值字符串,规避负号干扰;遍历反转后的字符,仅yield符合要求的偶数位数字字符
  3. 避免类型转换错误
    • 提前处理负数,确保生成器遍历的字符串仅包含数字字符,转换int(digit)时不会报错
  4. 逻辑简洁性优化
    • 全0判断通过all(char == '0' for char in str(abs(number)))实现,覆盖所有全0输入场景(如0、0000等)

测试验证

  • 输入1234:输出Your new password is: 42(符合示例要求)
  • 输入0:输出Invalid input(符合示例要求)
  • 输入-123:输出Invalid input(负数拦截)
  • 输入1000:输出Your new password is: 000(正确提取反转后的偶数位)

内容的提问来源于stack exchange,提问作者Harsh Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:37:35