靠你治失眠 发表于 2026-6-5 21:44:19

新人学习贴_通过年份和生肖估算对方年龄

本帖最后由 靠你治失眠 于 2026-6-5 21:50 编辑

# 通过生肖估算对方的年龄

num=['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪']
ct=7
print('#通过对方生肖估算年龄#\n')

year = input('请输入当前是几几年:\n\
(例如2026、2027之类,按回车继续)\n')
year_=int(year)

old = input('请输入对象的生肖:\n\
(例如:鼠、牛、虎之类,按回车继续)\n')
old_=str(old)                            # 输入非十二生肖会直接报错

jisuansx=(year_-1924)%12
if year_-1924<0:
    print('我超!时空穿越!惹不起,告辞!')
else:
    jnsx=num                  #算出今年的生肖
    print(f'今年是: {jnsx}年')
    cha=abs(jisuansx-num.index(old_))   #求生肖之差
    print('您查询的对象的实际年龄可能为:',end=' ')
    while ct>=0:
      real_old = cha+ct*12
      print(real_old,end=' ')
      ct-=1

总感觉哪里有问题。一时没想出来。

FishC 发表于 2026-6-5 21:44:53

学习提示: 你的代码思路很有趣,但有一些逻辑需要调整,否则会报错或得出错误年龄范围。下面帮你分析并提供一个更准确的版本。



主要问题

[*] 变量 num 未初始化,导致 jnsx=num 报错。
[*] 计算生肖差用了绝对值 abs,但十二生肖是循环的,应该用模运算得到最小非负差(今年生肖序号 减去 对方生肖序号 再取模)。
[*] 年龄输出只用 cha + 12*n,没有结合当前年份,所以输出的数字不是实际年龄,只是相对差值的倍数。比如今年是2027年(假设为羊年),对方属牛,年龄应该是 2027 - 出生年份,而不是单纯的相差几岁。




修正思路
1. 定义十二生肖列表,按顺序对应数字0~11(鼠0、牛1、虎2 ...)。
2. 计算当前年份对应的生肖序号(基准点可以是1924年(鼠年),或直接硬编码生肖顺序)。
3. 计算 当前生肖序号 - 对方生肖序号 再对12取模,得到 基础年龄差(对方比当前生肖的人大多少岁)。
4. 枚举合理年龄(比如0~120岁),每次加12,输出所有可能的年龄。



改进后的示例代码


# 通过生肖估算对方年龄(修正版)
sx_list = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪']
# 1924年是鼠年,序号0,之后12年一循环

year = int(input('请输入当前年份(如2027):'))
animal = input('请输入对方的生肖(如鼠、牛):')

# 计算当前生肖序号
cur_index = (year - 1924) % 12
cur_animal = sx_list
print(f'今年是:{cur_animal}年')

# 计算对方生肖序号
if animal not in sx_list:
    print('输入的生肖无效!')
    exit()

target_index = sx_list.index(animal)

# 计算基础年龄差(对方比今年生人大多少岁)
base_diff = (cur_index - target_index) % 12

# 输出可能的年龄(假设年龄在0~120之间)
print('可能的年龄为:', end=' ')
for n in range(0, 11):# 最多到120岁
    age = base_diff + 12 * n
    if age > 120:
      break
    print(age, end=' ')
print()




运行示例

[*] 输入当前年份 2027,对方生肖 牛,输出 可能的年龄为: 1 13 25 37 ... (因为2027是羊年,属牛的人比今年生人大1岁,也可能是13岁、25岁等)。
[*] 输入非生肖会直接提示并退出。




更多建议

[*] 可以加上输入校验,比如年份不能小于1900。
[*] 如果想精确到周岁,还可以让用户输入对方的大概年龄段(比如青少年、中年),缩小范围。
[*] 新人阶段多练习条件判断、列表操作和取模运算,这题就是很好的实战。


继续加油!有问题随时在论坛交流。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

靠你治失眠 发表于 2026-6-5 22:09:38

非常感谢提供的新思路。

FishC 发表于 2026-6-5 22:09:44

靠你治失眠 发表于 2026-06-05 22:09
非常感谢提供的新思路。

不客气!能帮到你很高兴。你已经掌握了这个练习的核心——利用模运算和列表索引处理周期性数据,这是编程中非常实用的技巧。后续可以尝试加入输入校验(比如年份范围、生肖是否合法),或者让用户指定年龄范围(比如“对方大概30~40岁”),进一步缩小输出的可能年龄。

如果有其他想法或遇到新问题,随时发帖交流。祝你在FishC玩得开心,编程进步!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 新人学习贴_通过年份和生肖估算对方年龄