

引数として西暦年を渡すと、その年の全ての日曜日の日付を文字列 YYYY-MM-DD 形式のリストで返すプログラムを作りたい  
一番下のall_sunday(y,m,d)にエラーが起きています

[code]

    y = int(input("何年(西暦)？："))
    import datetime
    def all_sunday(y,m,d):
      dt = datetime.datetime(y, 1, 1)
      s = dt.weekday()
      a = 6 - s
      x = dt + datetime.timedelta(days=a)
      k = x.year
      z = x
      while True:
        print(z)
        z = x + datetime.timedelta(days=7)
        c = z.year
        if k < c:
         break
    
    all_sunday(y,m,d)
    
[/code]


CC BY-SA 4.0
2021-10-29T09:43:40.503
83327
2021-10-29T10:54:55.820
2021-10-29T10:54:55.820
7290
48861
question
python
NameError: name 'm' is not definedが解決できない


`y`は最初の行の`y
=int(input("何年(西暦)？："))`で宣言と入力による値の設定が行われていますが、`m`(と`d`も)は何処にも宣言・設定が行われていません。  
つまりメッセージのとおり`m`が定義されていないためにエラーとなっています。

なおついでに言うと`def
all_sunday(y,m,d):`関数の中でも仮引数としては宣言されていますが、関数の中の処理では何も使われていないため今のままでは不要です。

以下のいずれかのような対処が考えられます。

  * `all_sunday(y,m,d)`を実行する前に`m = 1`や`d = 1`のようなダミーの変数宣言や値設定を行う。
  * `all_sunday(y,m,d)`や`def all_sunday(y,m,d):`の両方で`,m,d`は不要なので削除する。

* * *

それから`all_sunday()`関数の中にバグがあって表示される内容が正しくなく、かつ無限ループで終了しなくなります。  
`while`ループの中の処理を見直してみてください。


CC BY-SA 4.0
2021-10-29T10:54:33.917
83329
2021-10-29T10:54:33.917
26370
83327
answer