我想創建一個帶有用戶定義函式的python程式,它應該讀取用戶輸入的年份,并通過檢查輸入的年份是否為閏年來回傳真/假。
代碼也應該遵循公歷系統。
這是我嘗試過的
def is_leap(year):
leap = False
if(year%4==0):
if(year%100!=0):
if(year%400==0):
leap= True
else:
leap= False
else:
leap= False
else:
leap= False
return leap
year = int(input())
print(is_leap(year))
而且我沒有得到想要的輸出。
我用以下兩個輸入嘗試了這段代碼
2024
輸出是
False
和
2023
輸出是
False
我在這里想念什么?
uj5u.com熱心網友回復:
首先處理例外會產生更清晰的代碼。
def is_leap(year):
if year % 400 == 0:
return True # an exception to the century rule
if year % 100 == 0:
return False # centuries aren't leap years
return year % 4 == 0
uj5u.com熱心網友回復:
讓我們逐步了解 2024 年的代碼:
year%4==0是 True,所以我們進入 if 塊year0!=0也是 True,所以我們再次進入 if 塊。
現在您檢查year@0==0. 嗯,為什么?2024 不是一個世紀,所以它永遠不可能是 400 的倍數。所以你的邏輯在這里被打破了。2024 能被 4 整除,不能被 100 整除。此時我們可以簡單地回傳 True!
在下一種情況下,我們需要檢查是否可以被 400 整除(其中year0!=0為 False)。
如果我們接受所有這些,我們會得到以下代碼:
def is_leap(year):
if(year%4==0):
if(year%100!=0):
return True
else:
if(year%400==0):
return True
else:
return False
else:
return False
(注意我是如何擺脫完全不必要的變數的。)
uj5u.com熱心網友回復:
通過嵌套 if/else,您可以充當 AND,而您需要 OR。
最好是重構你的代碼:
def is_leap(year):
if (year%4==0) and (year%100!=0) or (year%400==0):
return True
return False
這相當于:
def is_leap(year):
return (year%4==0) and (year%100!=0) or (year%400==0)
測驗:
assert not is_leap(1700)
assert not is_leap(1800)
assert not is_leap(1900)
assert not is_leap(2023)
assert is_leap(1600)
assert is_leap(2000)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532730.html
上一篇:訪問ac檔案外的變數
下一篇:按鈕函式呼叫另一個函式
