year = input('請輸入年份:')
if (year % 400==0 | year % 4==0 & year % 100!=0):
print(year + "是閏年")
else:
print(year + "是平年")
我在輸入年份後會報錯
以下是錯誤訊息:
Traceback (most recent call last):
File "檔案路徑", line 2, in <module>
if (year % 400==0 | year % 4==0 & year % 100!=0):
TypeError: not all arguments converted during string formatting
請問這要怎麼解決呢?
目前大致看了一下你的程式主要有3個問題:
1. 首先是錯誤訊息的部分,
要知道 input() 是讀取一行字串所以其形態為 str(string, 字串) ,
由於字串無法對 int(整數) 做 % 運算而導致的 型態錯誤(TypeError) ,
可以藉由 int() 來將 str 轉乘 int 的型態~
2. 你在判斷時所使用的 |運算子 和 &運算子 是用來處理位元運算所使用的運算子,
雖然對於 True 和 False 來說其實效果相同,
但還是使用 or 和 and 的邏輯運算會來的更好,
而且由於位元運算(|和&)優先度比起比較運算(==和!=)來的更高,
所以實際上 Python 會執行的順序會是 ((year % 400)==(0 | (year % 4))==(0 & (year % 100))!=0)
顯然這並不是期望的運算順序而導致答案錯誤,
而邏輯運算(or和and)的優先度比起比較運算(==和!=)來的更低,
故使用邏輯運算(or和and)就不會有運算順序錯誤的問題了~
3. 輸出請依照格式,
由於 ZJ 是線上Judge並不是人工審閱答案,
所以 ZJ 只會比較你的輸出與測資答案是否一致,
題目只要求輸出 '閏年' 或 '平年' 而已,
所以在 input() 中不要放入多餘的文字, (該文字也是輸出的一部份)
print() 時也只要是 '閏年' 或 '平年' 就好不需要多餘的文字描述,
不然這樣可能會得到 WA 唷~
以上希望有幫助到你~ OwO
目前大致看了一下你的程式主要有3個問題:
1. 首先是錯誤訊息的部分,
要知道 input() 是讀取一行字串所以其形態為 str(string, 字串) ,
由於字串無法對 int(整數) 做 % 運算而導致的 型態錯誤(TypeError) ,
可以藉由 int() 來將 str 轉乘 int 的型態~
2. 你在判斷時所使用的 |運算子 和 &運算子 是用來處理位元運算所使用的運算子,
雖然對於 True 和 False 來說其實效果相同,
但還是使用 or 和 and 的邏輯運算會來的更好,
而且由於位元運算(|和&)優先度比起比較運算(==和!=)來的更高,
所以實際上 Python 會執行的順序會是 ((year % 400)==(0 | (year % 4))==(0 & (year % 100))!=0)
顯然這並不是期望的運算順序而導致答案錯誤,
而邏輯運算(or和and)的優先度比起比較運算(==和!=)來的更低,
故使用邏輯運算(or和and)就不會有運算順序錯誤的問題了~
3. 輸出請依照格式,
由於 ZJ 是線上Judge並不是人工審閱答案,
所以 ZJ 只會比較你的輸出與測資答案是否一致,
題目只要求輸出 '閏年' 或 '平年' 而已,
所以在 input() 中不要放入多餘的文字, (該文字也是輸出的一部份)
print() 時也只要是 '閏年' 或 '平年' 就好不需要多餘的文字描述,
不然這樣可能會得到 WA 唷~
以上希望有幫助到你~ OwO
別說了我直接打給你看...
year = int(input('請輸入年份:'))
if ((year%400)==0) or ((year%4)==0) and ((year%100)!=0):
print("是閏年")
else:
print("是平年")
您的答案為: 請輸入年份:是 ...略 正確答案為: 閏年
year = int(input())
if ((year%400)==0) or ((year%4)==0) and ((year%100)!=0):
print("閏年")
else:
print("平年")
您共輸出 1 行。