如何使具有特定条件的数字遵循特定的代码块? (Python)

问题描述 投票:0回答:1

我正在尝试为我的 Zybooks python 课程编写一个程序,但我不知道如何让它工作。提示是这样的:

现代公历中的一年由 365 天组成。事实上,地球绕太阳旋转需要更长的时间。考虑到时间差异,每 4 年发生一次闰年。闰年是指一年有 366 天:多出一天,即 2 月 29 日。给定年份为闰年的要求是:

  1. 年份必须能被4整除

  2. 如果年份是世纪年(1700年、1800年等),则该年份必须能被400整除;因此,1700年和1800年都不是闰年

闰年的一些示例为 1600 年、1712 年和 2016 年。

编写一个程序,输入一年并确定该年是否为闰年。

我尝试了多种方法,但我不知道我能做什么。我想让可被 100 整除的数字遵循我的代码的第一部分,而其余不符合条件的数字遵循第二部分。我有什么办法可以做到这一点吗

首先我尝试做:

is_leap_year = False
   
input_year = int(input())

if input_year % 100 == 0 and input_year % 400 == 0 or input_year % 4 == 0:
    print(input_year,'- leap year')
else:
    print(input_year,'- not a leap year')

为了使 input_years 可以被 100 整除,而 input_years 可以被 400 整除,没有余数为闰年,或者如果这不起作用,那么 input_years 可以被 4 整除,没有余数算作闰年;然而,这将以 1900 年被算作闰年而结束,而实际上它不是闰年

(正确)输入 1954年 你的输出 1954 年 - 不是闰年

(正确)输入 2016年 你的输出 2016 年 - 闰年

(正确)输入 1600 你的输出 1600 年 - 闰年

(不正确)输出不同。 输入 1900年 你的输出 1900 年 - 闰年 预期产出 1900 年 - 不是闰年

然后我尝试了:

is_leap_year = False
   
input_year = int(input())

if input_year / 100 and input_year % 400 == 0:
    print(input_year,'- leap year')
else:
    print(input_year,'- not a leap year')

if input_year % 4 == 0:
    print(input_year,'- leap year')
else:
    print(input_year,'- not a leap year')

但是,这最终会让我得到如下所示的两个输出:

1900 - 不是闰年 1900 年 - 闰年

我还尝试用 and 切换 or ,但这会将 2016 年标记为非闰年,因为它不满足这两个标准。有什么办法可以让我可以这样写,让除以 100 的数字只运行代码的第一部分,而不尝试运行第二部分?

python if-statement
1个回答
0
投票

问题是,当你检查是否能被 4 整除时,你并没有强制它不是一个世纪年份。世纪年份单独检查。

使用此代码:

is_leap_year = False

input_year = int(input())

if input_year / 100 and input_year % 400 == 0:
    print(input_year,'- leap year')

elif input_year % 4 == 0 and input_year % 100 !=0 :
    print(input_year,'- leap year')
else:
    print(input_year,'- not a leap year')
© www.soinside.com 2019 - 2024. All rights reserved.