質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

5774閲覧

入力した西暦がうるう年かどうかを判定する方法

momo.hi

総合スコア15

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/23 14:06

編集2019/05/23 14:17

プログラミング言語、Pythonを使用して、値(西暦)を入力したときに、入力した西暦がうるう年かどうかを判定するプログラムを作っていますが、エラー内容と解決方法が分かりません。
ざっくりとした質問で申し訳ございませんが、ご教授頂けたら幸いです。
宜しくお願い致します。

[ソース]

!#-*- coding:utf-8 -*- def is_leapyear(year): # 4で割り切れるときはうるう年 if year % 4 == 0: # 100で割り切れて、400で割り切れない場合はうるう年ではない if year % 100 == 0 and year % 400 != 0: return False # 100で割り切れて、400で割り切れる場合はうるう年 elif year % 100 == 0 and year % 400 == 0: return True # 4で割り切れて、100で割り切れない場合はうるう年 else: return True else: return False def main(): # 入力した値をいれる x = input('x年のxの値を入力 x= ') for year in x: if is_leapyear(year): print(str(year) + "年はうるう年です。") else: print(str(year) + "年はうるう年ではありません。") i = 1 leapYear = 0 if __name__ == "__main__": main()

[入力した値]
x年のxの値を入力 x= 2000

【実行結果】

TypeError Traceback (most recent call last)
<ipython-input-1-5e7f0e118bcd> in <module>()
52
53 if name == "main":
---> 54 main()

<ipython-input-1-5e7f0e118bcd> in main()
24
25 for year in x:
---> 26 if is_leapyear(year):
27 print(str(year) + "年はうるう年です。")
28 else:

<ipython-input-1-5e7f0e118bcd> in is_leapyear(year)
4
5 # 4で割り切れるときはうるう年
----> 6 if year % 4 == 0:
7 # 100で割り切れて、400で割り切れない場合はうるう年ではない
8 if year % 100 == 0 and year % 400 != 0:

TypeError: not all arguments converted during string formatting

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/23 14:09

回答依頼いただいて申し訳ないのですがPython自体は全く守備範囲外なのでスコア高いかたに依頼いただければと(Webに関連していれば回答が可能な場合もありますがPythonによった話にはなりませんので) あと、コードはマークダウンのcode機能を利用してご提示ください。Pythonって確かインデントが生命線ですよね?code使わないと行頭のインデントはきかないので、正しく再現確認や調整ができません
waku_nagoya

2019/05/23 14:11

ソースがとっても見にくいので、 ```python ソース ``` の中に書いてくれるとありがたいです。
momo.hi

2019/05/23 14:16

本当に不慣れで申し訳ございません。 改めて、宜しくお願い致します。
LouiS0616

2019/05/23 14:17

main関数内にループを置いた理由をお聞きしたいです。
momo.hi

2019/05/23 14:22

すみません。 プログラムミングをはじめて日が浅く、分からなかったため 参考書から少し参考にして書いたのですが、修正方法が分からないです...
guest

回答3

0

TypeErrorの原因はyearの内容が文字列だからだと思います。どこかでint(year)するとよいのではないでしょうか。

投稿2019/05/23 14:22

iwamot

総合スコア1154

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数の型が良くないかと思われます

一度year = int(year)のように年を整数に変換してみてはいかがでしょう

投稿2019/05/23 14:23

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo.hi

2019/05/23 15:03

解決することが出来ました!型変換は改めて勉強になりました。 ありがとうございました! 今後とも宜しくお願い致します!!
guest

0

ベストアンサー

ループの理由は分かりませんが、例えばスペース区切りで複数の年を一度に判定したい場合は

python

1def main(): 2 # 入力した値をいれる 3 x = input('x年のxの値を入力 x= ') 4 5 for year in x.split(): 6 if is_leapyear(int(year)): 7 print(str(year) + "年はうるう年です。") 8 else: 9 print(str(year) + "年はうるう年ではありません。") 10 i = 1

と main関数を書き換えると良いです。

x年のxの値を入力 x= 2000 2002 2000年はうるう年です。 2002年はうるう年ではありません。

という風に実行できます。

投稿2019/05/23 14:22

waku_nagoya

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo.hi

2019/05/23 15:07

解決することができました。 汚いソースにもかかわらず、解析していただき、ありがとうございました。 また、分かりやすい修正プログラムと実行結果まで送って頂き本当に勉強になりました! 今後とも宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問