#15805: python 問題:not all arguments converted during string formatting


a076902768@gmail.com (鄭偉博)

學校 : 國立嘉義大學
編號 : 87809
來源 : [114.39.37.121]
最後登入時間 :
2018-12-13 22:39:13
a004. 文文的求婚 | From: [36.236.86.10] | 發表日期 : 2018-11-01 19:04

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

請問這要怎麼解決呢?

 

 

 

 

 
#15807: Re:python 問題:not all arguments converted during string formatting


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
a004. 文文的求婚 | From: [106.105.27.148] | 發表日期 : 2018-11-01 20:17

目前大致看了一下你的程式主要有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

 
#15814: Re:python 問題:not all arguments converted during string formatting


spiritr98@gmail.com (SkyMarshall Lam)

學校 : 不指定學校
編號 : 83477
來源 : [175.159.216.129]
最後登入時間 :
2019-10-03 17:39:02
a004. 文文的求婚 | From: [223.16.246.13] | 發表日期 : 2018-11-01 23:33

目前大致看了一下你的程式主要有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("是平年")

#0: 4% WA (line:1)

您的答案為: 請輸入年份:是 ...略
正確答案為: 閏年

year = int(input())
if ((year%400)==0) or ((year%4)==0) and ((year%100)!=0):
  print("閏年")
else:
  print("平年")

#0: 4% WA (line:2)

您共輸出 1 行。
 
ZeroJudge Forum