如何实现年份转世纪函数?关于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,和任何预期输出都对不上。
三、完善你的年份转世纪函数
你的代码目前有两个小问题:
len(str(year)) == 1 or 2写法错误,应该写成len(str(year)) == 1 or len(str(year)) == 2(或者更简洁的len(str(year)) <=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
相关产品推荐
相关产品推荐

