Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python闰年计算器(用户选择的两年之间)_Python_Python 3.x_Algorithm - Fatal编程技术网

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

Python闰年计算器(用户选择的两年之间),python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我找不到正确的循环来让代码工作 我尝试使用while循环,我可以让Python显示用户选择的两年之间的所有闰年,但不以要求我使用的格式显示 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循环,我可以让Python显示用户选择的两年之间的所有闰年,但不以要求我使用的格式显示

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.")
提示:答案使用for循环来处理从开始到结束的所有年份 年末,一个额外变量作为闰年计数器,以及各种if和if-else语句 在循环中检查年份是否为闰年,是否需要逗号,以及是否需要新行
是必需的。

条件应不同-

if (start % 4 == 0 and start % 100 != 0) or (start % 4 == 0 and start % 400 == 0):
此外,为了将年末包括在范围内,循环条件应为-

while start <= end:

while start以下是一个优雅的解决方案,我认为可能会对您有所帮助:

start=int(输入(“输入开始年份:”)
end=int(输入(“输入年终:”)

如果开始如提示所示,请使用计数器。 此计数器应计算您打印的闰年数。每十个闰年,输出以换行符结束,否则以逗号和空格结束

要获得正确的数字,只需添加一个变量
leap\u year\u counter
,并检查
==10
和reset或
%10
,然后还可以输出最后找到的数量。 要以正确的结尾实际打印,请使用
print
函数的
end
关键字参数(
print(value,end=)

提示中的
for
循环部分可能希望您使用
for范围内的年份(开始、停止)
,而不是
while
循环。

试试:

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

[注]:

  • 您还可以使用
    来表示范围内的开始(开始,结束)
    而不是
    ,同时开始
    start+=1
start=int(输入(“输入开始年份:”)
end=int(输入(“输入年终:”)
如果开始>结束:
打印(“再次检查您的年度输入。”)
其他:
打印(“这里是“+str(开始)+”和“+str(结束)+”之间的闰年列表:”)

虽然(开始我恐怕不同意您使用计数器来确定是打印逗号还是在换行后打印句号的提示。这造成了一个非常复杂的循环。问题出现在最后一行,其中可能包含少于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])))
start=int(输入(“输入开始年份:”)
end=int(输入(“输入年终:”)
开始>=结束时:
打印(“再次检查您的年度输入。”)
开始=整数(输入(“输入开始年份:”)
end=int(输入(“输入年终:”)
print(“这里是{0}和{1}之间的闰年列表:”.format(开始,结束))
闰年=[]
开始时获得闰年:

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

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

为什么要用
while
循环而不是
for
循环?是否有任何年份可以被100整除而不是闰年??闰年应该只能被4整除,而不能被100或400整除。@onyanbu如它所说,“任何被100整除的年份只有在也可以被400整除时才是闰年”.据我所知,对于可除年份/1000也有一些例外,这在问题中没有提到。复杂的事情,跳跃years@Onyambu100;200;300;500;600;700;…是您提问后的示例(如“告诉我任何…”)。使用
lambda start,stop:[y代表范围内的y(start,stop,100)if(不是y%100)和y%400]
如果需要more@user24343我的问题不是如何获得它们,而是为什么它们不是闰年。不是编码部分,而是为什么它们不被定义为闰年
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
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])))
start = int(input("Enter start year: "))
end = int(input("Enter end year: "))

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