鱼C论坛

 找回密码
 立即注册
查看: 29|回复: 3

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

[复制链接]
发表于 昨天 21:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 靠你治失眠 于 2026-6-5 21:50 编辑
  1. # 通过生肖估算对方的年龄

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

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

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

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


总感觉哪里有问题。一时没想出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 21:44 | 显示全部楼层
学习提示: 你的代码思路很有趣,但有一些逻辑需要调整,否则会报错或得出错误年龄范围。下面帮你分析并提供一个更准确的版本。


[/hr]

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



[/hr]

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


[/hr]

改进后的示例代码


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

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

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

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

  14. target_index = sx_list.index(animal)

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

  17. # 输出可能的年龄(假设年龄在0~120之间)
  18. print('可能的年龄为:', end=' ')
  19. for n in range(0, 11):  # 最多到120岁
  20.     age = base_diff + 12 * n
  21.     if age > 120:
  22.         break
  23.     print(age, end=' ')
  24. print()
复制代码



[/hr]

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



[/hr]

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 昨天 22:09 | 显示全部楼层
非常感谢提供的新思路。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:09 | 显示全部楼层
靠你治失眠 发表于 2026-06-05 22:09
非常感谢提供的新思路。


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-6-6 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表