【问题标题】:Calculating the century from a given year从给定年份计算世纪
【发布时间】:2018-03-21 21:57:21
【问题描述】:

有一个条件,我必须使用 return 而不是 print,因为如果我使用 print,if 条件将不会继续(如果我错了,请纠正我),现在我需要查看结果(在某些网站中,例如当代码与他们如何将事物组合在一起以检查解决方案是否正确时)

def centuryFromYear(year):
    """Calculates the century for a given year: 
    Example: year 1 = 1, year 100 = 1, year 101 = 2 year 1954 = 19 etc."""
    if len(str(year)) == 1 or 2:
        return 1
    if len(str(year)) == 3:
        if year[1:3] == 0:
            return year[0]
    else:
        return year[0] + 1
    if len(str(year)) == 4:
        if year[1:4] == 0:
           return year[0] + 0
    else:
        return year[0:2] + 1

【问题讨论】:

  • 有什么问题?即预期的输出是什么,你现在看到了什么?
  • print(centuryFromYear(2018))?
  • 您的身份已关闭。 if year[1:3] == 0 应该完成什么...何时是 len > 0 == 0 的列表?您的 ifs 缺少 else,因此如果 if 不匹配,它们会返回“某物”-在这种情况下,他的方法将隐式返回 None
  • @sam 给定一个年份,返回它所在的世纪。第一个世纪从第 1 年到第 100 年(包括第 100 年),第二个世纪从第 101 年到第200等
  • if len(str(year)) == 1 or 2: 不会像您认为的那样做。这与 if (len(str(year)) == 1) or 2 的计算结果相同

标签: python return


【解决方案1】:

这不是一个真正的逻辑问题,它更像是一个数学问题 - 不要将你的 int 转换为字符串 - 而是计算世纪:

def centFromYear(year):
    return (year-1)//100 +1   # substract 1 so 100 is 1 as well, floordiv by 100, add 1

for n in range(1,2000,100): # testcase centuries
    for m in range(-1,2):    # testcase -1,0,+1 to the centuries
        print(n+m, centFromYear(n+m))

输出:

inputyear / calculated century
(0, 0)
(1, 1)
(2, 1)
(100, 1)
(101, 2)
(102, 2)
(200, 2)
(201, 3)
...
(1900, 19)
(1901, 20)
(1902, 20)

【讨论】:

  • 好的,我接受数学部分,但在控制台中我又看不到任何结果 def CenturyFromYear(year): return (year - 1) // 100 + 1 CenturyFromYear(19)
  • @iman_sh77 函数centFromYear(1987) 返回一个整数。要在控制台中显示,请打印:print(centFromYear(1987)) - 用于计算,将其存储在变量中:century = centFromYear(2018) - 并使用变量
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 2011-06-20
  • 2022-01-16
  • 2013-11-24
相关资源
最近更新 更多