求助:编写nondec函数判断正整数数字是否为非递减序列
问题修复方案
你的代码核心问题在于使用了浮点除法n = n/10,导致后续循环中n变为浮点数,n%10无法正确提取整数位的最后一位,进而引发错误的比较判断。比如输入222时,第二次循环会得到lastdigit=22.2%10=2.2,这个值大于前一次的prev=2,错误返回False。
修复方法很简单,将浮点除法替换为整数除法n = n // 10,确保每次循环都能正确去掉n的最后一位整数:
def nondec(n): ''' >>> nondec(113355779) True >>> nondec(44569) True >>> nondec(346234) False >>> nondec(222) True >>> nondec(789) True >>> nondec(55555) True >>> nondec(1234123) False >>> nondec(98765) False ''' prev = 9 while n > 0 : lastdigit = n % 10 if lastdigit > prev: return False prev = lastdigit n = n // 10 # 替换为整数除法 return True if __name__ == "__main__": import doctest doctest.testmod(verbose=True)
验证说明
修改后所有测试用例均可通过:
- 重复数字案例(如
222、55555):每次提取的最后一位数字都等于prev,不会触发return False,最终返回True。 - 非递减序列(如
113355779、789):后续数字均不大于前一位,循环正常结束返回True。 - 递减/无序序列(如
98765、346234):会在某次循环中检测到当前数字大于前一位,返回False。
内容的提问来源于stack exchange,提问作者Alba
相关产品推荐
相关产品推荐

