Python leap年计算器(用户选择的两年之间)

时间:2019-01-27 17:02:12

标签: python python-3.x algorithm

我找不到用于使此代码正常工作的正确循环!

我尝试使用while循环,并且我可以让Python显示用户选择的两年之间的所有the年,而不是要求我使用的格式。

start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

if start < end:
  print ("Here is a list of leap years between " + str(start) + " and " + str(end)  + ":")

 while start < end:
    if start % 4 == 0 and start % 100 != 0:
        print(start)
    if start % 100 == 0 and start % 400 == 0:
        print(start)
    start += 1

if start >= end:
 print("Check your year input again.")

问题描述:如果年份可被四整除,则年份为is年,但任何可被100整除的年份为a年 仅当also年也可被400整除时,才可以编写一个leap年。编写一个计算出 用户指定的两年之间的年。该程序应列出10个飞跃 每行的年数,其中列出了每年的逗号和末尾的句号,例如 在以下示例输入/输出中:

Enter start year: 1000
Enter end year: 1200
Here is a list of leap years between 1000 and 1200:
1004, 1008, 1012, 1016, 1020, 1024, 1028, 1032, 1036, 1040,
1044, 1048, 1052, 1056, 1060, 1064, 1068, 1072, 1076, 1080,
1084, 1088, 1092, 1096, 1104, 1108, 1112, 1116, 1120, 1124,
1128, 1132, 1136, 1140, 1144, 1148, 1152, 1156, 1160, 1164,
1168, 1172, 1176, 1180, 1184, 1188, 1192, 1196, 1200.

提示:答案使用for循环在从开始年份到开始年份的所有年份中工作。 结束年,一个额外的变量作为a年计数器,以及各种if和if-else语句 在循环中检查年份是否为a年,是否需要逗号以及是否换行 是必需的。

7 个答案:

答案 0 :(得分:0)

条件应该不同-

if (start % 4 == 0 and start % 100 != 0) or (start % 4 == 0 and start % 400 == 0):

此外,为了将结束年份包括在循环条件应为的范围内-

while start <= end:

答案 1 :(得分:0)

这是一个优雅的解决方案,我认为可以为您提供帮助:

start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

if start <= end:
    leap_years = [str(x + start) for x in range(end-start) if x % 4 == 0 and x % 100 != 0]
    leap_years[-1] += "."
    print(f"Here is a list of leap years between {start} and {end}:\n{(', '.join(leap_years))}")
else:
    print("Check your input years again!")

对此有解释吗?本质上,它会在您的开始和结束年度之间进行调整,然后循环遍历以查看是否可以被4整除,而不能被400整除;它将其添加到我们可以使用,进行连接的数组中,然后在末尾添加一个句点,并使用f字符串将其显示给用户。

答案 2 :(得分:0)

如提示所述,请使用计数器。 此计数器应计算您已打印的leap年数。每隔leap年,将以换行符结束输出,否则以逗号和空格结束。

要正确计算数字,只需添加一个变量leap_year_counter并检查==10并重置还是%10,那么您还可以输出最后找到的数量。 要实际打印正确的结尾,请使用end函数(print的{​​{1}}关键字参数。

提示的print(value, end=<end you want>)循环部分可能希望您使用for而不是for year in range(start, stop)循环。

答案 3 :(得分:0)

尝试一下:

while start < end:
    if start % 4 == 0:
        if start % 100 == 0:
            if start % 400 == 0:
                print("{} is a leap year".format(start))
            else:
                print("{} is not a leap year".format(start))
        else:
            print("{} is a leap year".format(start))
    else:
        print("{} is not a leap year".format(start))
    start += 1

出局:

Enter start year: 2000
Enter end year: 2020
2000 is a leap year
2001 is not a leap year
2002 is not a leap year
2003 is not a leap year
2004 is a leap year
2005 is not a leap year
2006 is not a leap year
2007 is not a leap year
2008 is a leap year
2009 is not a leap year
2010 is not a leap year
2011 is not a leap year
2012 is a leap year
2013 is not a leap year
2014 is not a leap year
2015 is not a leap year
2016 is a leap year
2017 is not a leap year
2018 is not a leap year
2019 is not a leap year

[注意]:

  • 您也可以使用for start in range(start, end)代替while start < endstart += 1

答案 4 :(得分:0)

start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

if start > end:
    print("Check your year input again.")
else:
    print ("Here is a list of leap years between " + str(start) + " and " + str(end)  + ":")
    while(start <= end):  
        if start % 100 == 0 and start % 400 == 0:
            print(start)
            start += 1
        if start % 4 == 0 and start % 100 != 0:
            print(start)
            start += 1
        else:
            start += 1

您需要添加其他部分。因为没有a年,程序无法做任何事情。

答案 5 :(得分:0)

恐怕我不同意您使用计数器来确定要打印逗号还是句号并后跟换行符的提示。这导致一个非常复杂的循环。最后一行出现问题,其中可能少于10年的数字。我认为您仍然希望在句号的最后加上句号而不是逗号。

建立年份表并在之后进行格式化,而不是在循环中打印行。我已经尽可能少地更改了您的解决方案。您不要求进行的一项更改涉及修复输入验证。

start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

while start >= end:
    print("Check your year input again.")
    start = int(input("Enter start year: "))
    end = int(input("Enter end year: "))

print ("Here is a list of leap years between {0} and {1}:".format(start,end))

leap_years = []
while start <= end:
    if start % 4 == 0 and start % 100 != 0:
        leap_years.append(str(start))
    if start % 100 == 0 and start % 400 == 0:
        leap_years.append(str(start))
    start += 1

for line in range(0, len(leap_years), 10):
    print ("{0}.".format(", ".join(leap_years[line:line+10])))

答案 6 :(得分:0)

获得leap年:

start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

list(range(start + (4 - start % 4), end + 1, 4))