无分支无循环实现2-4位数字连续差(含首尾)一致性校验
解决多位数环形等差数字校验问题(无分支、循环、函数)
需要编写Python程序接收2位、3位或4位数字,校验以下规则:
- 每两个连续数字的差的绝对值完全相同
- 首尾数字的差的绝对值也等于该差值
要求:不得使用函数、循环、if/else分支语句
原尝试代码的问题:
- 第一版通过拆分数字位判断,但逻辑组合错误,无法兼容不同位数输入
- 第二版使用
if/elif/else分支,违反规则
解决方案代码
num_str = input("Enter a number: ").zfill(4) d0 = int(num_str[0]) d1 = int(num_str[1]) d2 = int(num_str[2]) d3 = int(num_str[3]) diff01 = abs(d0 - d1) diff12 = abs(d1 - d2) diff23 = abs(d2 - d3) diff30 = abs(d3 - d0) diff31 = abs(d3 - d1) result = ( (d0 != 0) and (diff01 == diff12 == diff23 == diff30) ) or ( (d0 == 0 and d1 != 0) and (diff12 == diff23 == diff31) ) or ( (d0 == 0 and d1 == 0) ) print(result)
代码说明
- 统一格式处理:用
zfill(4)将输入字符串补前导零至4位,让2位、3位、4位数字统一为4位格式,避免分支判断位数 - 提取数字位:将4位字符串的每个字符转为整数
d0(千位)、d1(百位)、d2(十位)、d3(个位) - 差值计算:预计算所有需要的差值(连续位差值、首尾位差值)
- 逻辑判断:通过逻辑或组合三种位数的校验条件:
- 4位数字:千位不为0,所有连续位差值与首尾差值相等
- 3位数字:千位为0、百位不为0,百位-十位、十位-个位的差值,与个位-百位的差值相等
- 2位数字:千位和百位都为0,此时连续差值与首尾差值必然相等,直接判定为真
测试示例验证
- 输入
4840→ 返回True(所有差值均为4) - 输入
59→ 返回True(两位数字自动满足条件) - 输入
131→ 返回False(首尾差值0≠连续差值2) - 输入
2420→ 返回True(所有差值均为2)
内容的提问来源于stack exchange,提问作者001
相关产品推荐
相关产品推荐

