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

如何实现年份转世纪函数?关于return与print及结果验证的咨询

关于return/print的区别、刷题平台验证逻辑,以及你的年份转世纪函数完善

嘿,你的理解完全没毛病!先给你确认这点——在函数里用print代替return确实会搞砸后续逻辑,包括刷题平台的验证,我给你掰扯清楚细节:

一、为啥return不能换成print?

你说的太对了:print只是把内容输出到控制台给人看,但函数本身的返回值是None;而return是直接把结果作为函数的“输出产品”递出去,不管是后续的if判断,还是调用这个函数的地方(比如刷题平台的验证逻辑),都得靠这个返回值才能继续干活。

举个直观的例子:

# 错误写法:用print的情况
def is_even(num):
    if num % 2 == 0:
        print("Yes")  # 只是打印,函数返回None
    else:
        return False

# 调用后拿结果做判断
result = is_even(4)
if result:  # 这里result是None,条件永远不成立
    print("执行后续操作")

换成return就正常了:

# 正确写法:用return
def is_even(num):
    if num % 2 == 0:
        return True
    else:
        return False

result = is_even(4)
if result:  # 这里result是True,条件成立
    print("执行后续操作")

二、CodeFight这类平台怎么验证你的代码?

这类刷题平台的验证逻辑其实很接地气,流程大概是这样:

  • 平台提前备好一堆测试用例,每个用例都有「输入值」和「预期输出值」,比如针对你的世纪函数,测试用例可能是:输入1→预期1,输入100→预期1,输入101→预期2,输入1954→预期20(哦对,你的注释里1954=19是错的,1901-2000都是20世纪哈)。
  • 你提交代码后,平台会自动循环调用你的函数,把每个测试用例的输入传进去,然后接住函数的return值。
  • 把你的返回值和该用例的预期输出对比:全匹配就过,有一个不匹配就报错,还会告诉你哪组用例失败了(比如输入100,你返回了2,和预期1不符)。
  • 划重点:平台完全不认print的输出,只看函数return的内容,所以用print代替return肯定会挂,因为平台拿到的是None,和任何预期输出都对不上。

三、完善你的年份转世纪函数

你的代码目前有两个小问题:

  1. len(str(year)) == 1 or 2写法错误,应该写成len(str(year)) == 1 or len(str(year)) == 2(或者更简洁的len(str(year)) <=2);
  2. year[1:3]是对字符串切片,但year是数字类型,不能直接这么用,得先转成字符串。

给你两种写法,一种是基于字符串处理的(和你的思路对齐),另一种是更高效的数学公式写法:

写法一:字符串处理版(贴近你的初始思路)

def centuryFromYear(year):
    """Calculates the century for a given year: Example: year 1 = 1, year 100 = 1, year 101 = 2, year 1954 = 20 etc."""
    year_str = str(year)
    # 1-2位数的年份都属于1世纪
    if len(year_str) <= 2:
        return 1
    # 3位数的年份
    elif len(year_str) == 3:
        # 后两位是00的话,取第一位作为世纪;否则第一位加1
        if year_str[1:] == "00":
            return int(year_str[0])
        else:
            return int(year_str[0]) + 1
    # 4位数的年份
    else:
        # 取前两位,后两位是00则直接用前两位,否则前两位加1
        first_two = int(year_str[:2])
        if year_str[2:] == "00":
            return first_two
        else:
            return first_two + 1

写法二:数学公式版(更简洁高效)

不用转字符串,靠数学运算搞定所有情况,逻辑是:给年份加99后整除100,刚好覆盖所有边界情况:

def centuryFromYear(year):
    """Calculates the century for a given year: Example: year 1 = 1, year 100 = 1, year 101 = 2, year 1954 = 20 etc."""
    return (year + 99) // 100

测试几个边界值:

  • 1 → (1+99)//100 = 100//100 = 1 ✔️
  • 100 → (100+99)//100 = 199//100 =1 ✔️
  • 101 → 200//100=2 ✔️
  • 1900 → (1900+99)//100=1999//100=19 ✔️
  • 1954 → (1954+99)//100=2053//100=20 ✔️

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:16