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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

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

Q&A

解決済

2回答

2273閲覧

Pythonのプログラムが突然動作しなくなった原因について。

ichir0tanaka

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

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

0グッド

0クリップ

投稿2021/09/30 02:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
「ゼロからやさしくはじめるPython入門」の6章のサンプルを一通り実行し終わったので、
スタート地点にキャラクタがおかれるように改修する学習を思いつき動作確認のためリストを表示する行を追加、
表示されることを確認しましたが本日になって実行したところ、下記のようなエラーが出るようになってしまいました。
なぜ、昨日までは動いていたのに、突然map_dataが宣言されていない。とエラーが出てしまうのでしょうか?

発生している問題・エラーメッセージ

NameError Traceback (most recent call last) <ipython-input-6-0dad414e2ae4> in <module> 18 #py = 2 19 player_image = "player.png"#player.png ---> 20 print(map_data) 21 print(map_data[py]) 22 print(map_data[px]) NameError: name 'map_data' is not defined

該当のソースコード

#エラーの発生するプログラム from maze_show import * from maze_show2 import load_map_from_tsv from PIL import Image, ImageTk import tkinter.messagebox as msbox def main (): global map_data # 迷路データを読み込む map_data = load_map_from_tsv("maze3.csv") #maze_show2の関数を利用してcsv読み込み # ウィンドウを作成 create_window(map_data, [load_image, set_event]) # グローバル変数の初期化 px, py = (2, 2) #プレイヤー座標 16,13:3x3の所 2,2:スタート地点 24,17:ゴール手前 #px = 1 #py = 2 player_image = "player.png"#player.png print(map_data) print(map_data[py]) print(map_data[px]) print(map_data[py][px])#現在の足元情報 # プレイヤー画像を読み込む def load_image(cv, map_data): global canvas, img_tk canvas = cv img = Image.open(player_image) img_tk = ImageTk.PhotoImage(img) draw_player(canvas) # プレイヤーを描画 def draw_player(cv): x = px * tile_size y = py * tile_size cv.create_image(x, y, image=img_tk, anchor=NW) # マウスイベントを登録 def set_event(cv, map_data): cv.bind("<1>", canvas_click) #左クリックされたらcanvas_click動作実行 # キャンバスをクリックしたときの処理 def canvas_click(e): global px, py # マウス座標を得る mx = e.x my = e.y # 移動前に前回の値を記録 px_tmp = px py_tmp = py # 上下左右どちらに動くか判定 #座標の絶対計算 xx, yy = [px * tile_size, py * tile_size] ix, iy = [mx - xx, my - yy] #クリック位置と現在地の差を計算 if (0 <= ix < tile_size) and (0 <= iy <tile_size): pass #差がタイルサイズ以下ならクリックしても何もしない elif abs(ix) > abs(iy): #左右移動 if ix > 0: px += 1#クリック位置が現在地より右ならpxに1加算 else: px -= 1#そうでないならpxから1減産 else:#上下移動 if iy > 0: py += 1 #現在地をy以下ならpyに1を加算 else: py -= 1 # 移動先がマップデータ外なら戻す if px < 0 or px >= len(map_data[0]): px = px_tmp #pxがマップ外なら元に戻す if py < 0 or py >= len(map_data): py = py_tmp #pyがマップ外なら元に戻す # 移動先が壁なら元の位置に戻す print("現在座標={0},{1}".format(px, py)) mv = map_data[py][px] if mv == 1: px = px_tmp py = py_tmp msbox.showinfo(message="壁にぶつかった") return # プレイヤーを描画 canvas.delete("all") #キャンバスから全削除 draw_map(canvas, map_data)# マップ描画 draw_player(canvas)#プレイヤー描画 #print("現在座標={0},{1}".format(px, py)) print("mv={0}".format(mv)) # ゴールにたどり着いたか if mv == 3: msbox.showinfo(message = "祝 ごーる") if __name__ == "__main__" : main() #呼び出しをしているコード1 from tkinter import * tile_size = 20 # 迷路データを取り込む def load_map_data(): from maze_data import data return data # 迷路を表示する関数 def draw_map(cv, data): # 左上から右下へと描画 rows = len(data) cols = len(data[0]) for y in range(rows): y1 = y * tile_size y2 = y1 + tile_size for x in range(cols): x1 = x * tile_size x2 = x1 + tile_size # xとyのあたいから、対応するdataリストの値を得る p = data[y][x] # 値に応じた色を決定する if p == 0: color = "white" if p == 1: color = "#404040" if p == 2: color = "red" if p == 3: color = "blue" # 正方形を描画 cv.create_rectangle( x1, y1, x2, y2, fill=color, outline = "black", width = 2) # ウィンドウとキャンバスを作成 def create_window(map_data, events = []): win = Tk() win.title("迷路") rows = len(map_data) cols = len(map_data[0]) cv = Canvas(win, width = (cols * tile_size), height = (rows * tile_size)) cv.pack() draw_map(cv, map_data) # 追加処理あればここで実施 for func in events: func(cv, map_data) win.mainloop() if __name__ == "__main__": map_data = load_map_data() create_window(map_data) #呼び出しをしているコード2 from tkinter import * from maze_show import create_window # CSVを取り込む def load_map_from_tsv(filename): # ファイルを開く fp = open(filename, "rt", encoding = "utf-8") tsv = fp.read() # CSVファイルを解析 rows = tsv.split("\n") result = [] for line in rows: cols = line.split("\t") if len(cols) <= 1: break cols = list(map(int, cols)) result.append(cols) return result if __name__ == "__main__": map_data = load_map_from_tsv("maze2.csv") create_window(map_data)

試したこと

・以前別件ですが、どこにもスペルミスなどないのにエラーが出ることがあり、Anacondaを最新版に入れ替え、
(PCを再起動するとどこにも修正を加えていないのに実行できる場合も)
・当該の.jypnbが実行中でなければならないのかと起動。効果ありませんでした。
・当該.jypnbを.PY形式でjupyterに保存、画像、CSVも同階層に保存されていることは確認済です。

補足情報(FW/ツールのバージョンなど)

動作環境Anaconda3をインストール
jupyterは6.3.0
Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]

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

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

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

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

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

guest

回答2

0

再度PC再起動から実行しましたが、状況変わらずで、
print(map_data)
print(map_data[py])
print(map_data[px])
print(map_data[py][px])#現在の足元情報
を削除したら動作し、再度上記を記入したところprint文として処理されました。

原因不明ですがとりあえず動作しました

投稿2021/10/04 15:40

ichir0tanaka

総合スコア1

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

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

0

ベストアンサー

Jupyterは指定した部分しか実行しません。
何らかの理由でカーネルを再起動したようです。
もう一度最初から全部を実行してください。

初心者向けJupyter NotebookでPythonを動かす最初の一歩に書かれている、

エディタでスクリプトを実行するように、すべてのセルを最初から全部実行したいときは「Kernel」メニューの「Restart & Run All」を選択します。

をやるということです。

投稿2021/09/30 03:00

編集2021/09/30 03:02
ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問