質問するログイン新規登録
Python

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

Q&A

1回答

1002閲覧

【Python】ツェラーの公式が年しか表示されない

719236260906

総合スコア4

Python

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

0グッド

0クリップ

投稿2022/05/24 03:30

編集2022/05/24 03:42

0

0

前提

ここに質問の内容を詳しく書いてください。

Pythonでツェラーの公式を使い2022年1月の曜日を求めたいのですが、結果が2022としか表示されません。どうすればいいでしょうか

該当のソースコード

Python

1def mae(y): 2 y1 = int(y / 100) 3 return(y1) 4 5def ushiro(y): 6 y1 = mae(y) 7 y2 = y - y1 * 100 8 return(y2) 9 10def floor(x): 11 y = x - int(x) 12 if x >= 0: 13 kotae = int(x) 14 elif y == 0: 15 kotae = x 16 else: 17 kotae = int(x) - 1 18 return(kotae) 19 20def g(y1): 21 kotae = -2 * y1 + floor(y1 / 4) 22 return(kotae) 23 24def h(m,y2,g): 25 kotae = (1 + floor(26 * (m + 1) / 10) + y2 + floor(y2 / 4) + g)%7 26 return(kotae) 27 28y = input("2022") 29y = int(y) 30m = input("1") 31m = int(m) 32 33y1 = mae(y) 34y2 = ushiro(y) 35 36g = g(y1) 37h = h(m,y2,g) 38 39print(h) 40

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

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

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

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

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

melian

2022/05/24 03:39

手元の環境(Python 3.10.4)で実行してみると、5 と表示されます。
719236260906

2022/05/24 03:43

こちら3.10.1だと2022のみです。
melian

2022/05/24 03:46

2022 と表示されているのは、y = input("2022") としているからではないでしょうか。 y = input("year = ") y = int(y) m = input("month = ") m = int(m) に変更して実行、2022 と 1 を入力してください。
719236260906

2022/05/24 03:53

year = としか表示されませんでした
melian

2022/05/24 04:00

year = が表示されている時点で 2022 と打ち込んで Enter キーを押してください。
1T2R3M4

2022/05/24 04:21

>719236260906さん 自分で書いたコードの使い方を他人に聞くのはなぜですか。 input()はどのような目的で書いたのでしょうか。
719236260906

2022/05/24 04:38

ありがとうございます。無事5と出ました。 こちらのコードの前に['日', '月', '火', '水', '木', '金', '土']を挿入するということでいいでしょうか
melian

2022/05/24 05:04

その通りです、、と言いたい所ですが、2022年1月1日は土曜日です。月曜日から数え始めるのではないでしょうか。
guest

回答1

0

2022年1月の曜日を求めたいのですが、

月の曜日って変です。2022年1月1日の曜日ですよね。

結果が2022としか表示されません。

それは結果ではなく、input("2022") によるものです。

Pythonでツェラーの公式を使い

Python の //演算子を使えば、mae関数は不要です。
%演算子を使えば、ushiro関数は不要です。
引数が非負整数なら floor関数は不要です。

「ツェラーの公式」をWikipedia に書いてある通りに実装すれば、

Python

1def zeller(y, m, d): 2 if m < 3: 3 y -= 1 4 m += 12 5 c = y // 100 6 y %= 100 7 g = 5*c + c//4 8 return (d + 26*(m+1)//10 + y + y//4 + g) % 7 9 10y = int(input('year: ')) 11m = int(input('month: ')) 12d = int(input('day: ')) 13w = zeller(y, m, d) 14print(w, '土日月火水木金'[w])

土曜日から始まるよりは日曜日から始まるほうが自然でしょう。

Python

1def dow(y, m, d): # day of week 2 if m < 3: 3 y -= 1 4 m += 12 5 return (y + y//4 - y//100 + y//400 + 13*(m+6)//5 + d) % 7 6 7y = int(input('year: ')) 8m = int(input('month: ')) 9d = int(input('day: ')) 10w = dow(y, m, d) 11print(w, '日月火水木金土'[w])

投稿2022/05/25 03:44

kazuma-s

総合スコア8222

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問