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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

337閲覧

pythonでの正しい曜日や日数差が出力されるプログラム作成

k.lolo

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/05/23 14:53

編集2022/05/23 14:55

「うるう年」と「1981年1月1日の曜日」を考慮して,正しい曜日や日数差が出力されるよう書き換えてください。という課題があるのですが難しくて分からないです。
助けていただけませんか?
以下のコードを下の条件やヒントをもとに書き換えるみたいです。

・条件
1981年1月1日から2080年12月31日までに限定すると,西暦年号が4で割り切れる年はうるう年である.

1981年1月1日は木曜日である.

【ヒント】

うるう年は年間日数が1日多いので,1981年からある年の前年までにうるう年がn回あったとすると,その年の1月1日までの日数はn日増え,曜日もnだけずれることになる. nの値は,1981年からの年数の差が4となる1985年に1,8となる1989年に2,...と4年ごとに1つずつ増えていくので,1981年からある年までの年数を4で割ればnを求めることができる.

ある年がうるう年であるかどうかは,その西暦年号が4で割り切れるかどうかで調べることができる.うるう年だと,3月以降は,その年の1月1日からの日数が1日増え,曜日も1つずれることになる.

「課題5-2」までは簡単のため「1981年1月1日は日曜日」としていたが,ここでは,実際の暦どおり「木曜日」としている.日曜日と木曜日では曜日としての差は「4」と考えることができる.そこで,まずは今まで通りに曜日を求め,その上で曜日を4つずらせば...

入力例

19810101
20220523
出力例

Target Thursday
Today Monday
Delta is 15117 day(s)
入力例

20200229
20200301
出力例

Target Saturday
Today Sunday
Delta is 1 day(s)

year_month_day = input() year_month_day = int(year_month_day) today_year_month_day = input() today_year_month_day = int(today_year_month_day) def calc_daycount_and_dayofweek(year_month_day, today_year_month_day): month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31] day_week = ['Saturday', 'Friday', 'Tursday', 'Wednesday', 'Tuesday', 'Monday', 'Sunday'] quotient1 = year_month_day // 100 // 100 quotient2 = today_year_month_day // 100 // 100 remainder1 = year_month_day % 100 remainder2 = year_month_day // 100 % 100 remainder3 = today_year_month_day % 100 remainder4 = today_year_month_day // 100 % 100 if quotient1 > quotient2: daycount = (quotient1 - quotient2) * 365 + (sum((month[:remainder2])) + remainder1) -1 elif quotient2 > quotient1: daycount = (quotient2 - quotient1) * 365 + (sum((month[:remainder4])) + remainder3) -1 dayofweek = day_week[- daycount % 7] return (daycount, dayofweek) def output_result(days_weeks): print('Target', days_weeks[1]) print('Today', 'Monday') print(f'Delta is {days_weeks[0]} day(s)') days_weeks = calc_daycount_and_dayofweek(year_month_day, today_year_month_day) output_result(days_weeks) コード

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

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

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

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

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

hoshi-takanori

2022/05/24 00:59

うるう年に対応する前に現在のコードのダメ出しをしておくと、以下の入力 20211231 20220101 に対して 365 day(s) と出ますが、去年の大晦日から今年の元日なので経過日数は 1 日では。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問