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

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

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

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

Q&A

3回答

1360閲覧

for文の処理後の状態を確認したい

ot1982

総合スコア6

Python

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

0グッド

0クリップ

投稿2020/11/15 21:37

編集2020/11/15 22:34

python を始めて2カ月の初心者です。
ディレクトリとファイルとそれらの格納先を出力するプログラムを作成しています。
その中でfor文をいくつか使っているところがあり、そのfor文の処理後の状態がどのようになっているかを確認したいです。作成したコードは、下記になります。

import pandas as pd import openpyxl as xl import os def make_pathlist(path): pathlist = [] for curDir, dirs, files in os.walk(path): #指定したディレクトリからトップダウンの流れでディレクトリを走査 dum = curDir.count('\') - org.count('\') #ここでは何を変数に代入しているのか?? for a_dir in dirs: #各ディレクトリの一覧を取得 pathlist.append([curDir] + [''] * dum + [a_dir]) #ここでは何をしているのか?? for a_file in files: #各ファイルの一覧を取得 pathlist.append([curDir] + [''] * dum + [a_file]) #ここでは何をしているのか?? mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか?? return [s + [''] * (mx - len(s)) for s in pathlist] #何の戻り値を返しているのか? def conv_to_depthfirst(pathlist): for i in range(len(pathlist)): for j in range(1, len(pathlist[i])): dir = os.path.join(pathlist[i][0], pathlist[i][j]) if pathlist[i][j] and os.path.isdir(dir): zs = ze = 0 for k in range(i+1, len(pathlist)): if pathlist[k][0].find(dir) >= 0: if zs == 0: zs = ze = k else: ze = k else: if zs > 0: break if zs > i + 1: # zs ~ ze を i と i + 1 の間に挿入する return conv_to_depthfirst(pathlist[0:i+1] + pathlist[zs:ze+1] + pathlist[i+1:zs] + pathlist[ze+1:]) return pathlist

要するに、for文での処理が作業段階ごとにprintなどで出力して、ここでは何の作業をしているのだなと把握したいのですが、そのようなことってできるのでしょうか。

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

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

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

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

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

y_waiwai

2020/11/15 21:40

コードのインデントが潰れてしまってるので、コードが読めません
toast-uz

2020/11/15 22:40

> for文での処理が作業段階ごとにprintなどで出力して、ここでは何の作業をしているのだなと把握したいのですが、そのようなことってできるのでしょうか 実際にやってみて何か問題が発生したのでしょうか?
ot1982

2020/11/15 22:47

問題は発生していないのですが、掲載した部分だけ他者が作成したコードでして、どのようにプログラムが作られているのか把握したいためです。戻り値(return)の部分をprintで出力できるかと試みてみましたができませんでした。
toast-uz

2020/11/15 22:54

実際にやってみて=コードの動作のことではなく、「printなどで出力して」を実際にやってみて、という意味です。「何をしているのか??」というコメントがたくさんありますが、戻り値(return)の部分以外はprintできたのでしょうか?printしようとしてみたコードを提示いたたき、そこでどういう問題(エラーが出たとか、目的とは違うものがprintされたとか)を示していただくと回答しやすいです。
hentaiman

2020/11/16 01:19

GUIは使えるんですか?それともCUIでプログラム作ってますか?
ot1982

2020/11/16 21:53

toast-uzさん 戻り値(return)の部分もそれ以外もprint出力できていません。どこにそのような設定をすればよいかも正直分らない状態なので、可能であれば教えていただきたいです。 hentaiman どっちなのかわかりませんが、プログラムはanacondaのspiderで作成しました。
toast-uz

2020/11/16 22:03

例えば、 dum = curDir.count('\\') - org.count('\\') #ここでは何を変数に代入しているのか?? の直下に print(dum) mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか?? の直下にprint(mx) などを書いてみるといったことも、わからなくてできないのでしょうか? あるいはそういうことはやってみたが、期待と異なる結果がでたるのでしょうか?
ot1982

2020/11/16 22:23

toast-uzさん すみません、分からないです。ちなみに dum = curDir.count('\\') - org.count('\\') #ここでは何を変数に代入しているのか?? の直下に print(dum) mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか?? を入力して、1行ずつプログラムを実行していくと下記エラーメッセージがでてきました。 NameError: name 'dum' is not defined これは、printする際、変数に型(intなど)をつけないといけないのでしょうか。
toast-uz

2020/11/16 22:37 編集

printで変数名を表示させることが、わかっていない状況なのですね。だとすると今書かれている回答は理解できない状態でしょうか? なぜエラーが出ているのかはわかりません。実行の手順に問題があるか、うまくprint文が書けていないか、いろいろ可能性があると思います。 ただし、回答が理解できているなら、この話はあまり追いかけなくて、忘れていただいてもよいと思います。
guest

回答3

0

どっちなのかわかりませんが、プログラムはanacondaのspiderで作成しました。

上部のメニュータブのデバッグデバッグでデバッグ実行が出来るので、ブレークポイントに当たったらCtrl+F10でステップ実行しましょう。
ブレークポイントはコード左側の行数の部分をダブルクリックで設定できます

pathlist.append([curDir] + [''] * dum + [a_dir])

の書いてある行の左端でダブルクリックすれば良いでしょう

変数エクスプローラーに確認した変数が表示されない場合、変数エクスプローラーの右上の歯車マーク押してprivateな参照を除外のチェックを外しましょう
privateな参照を除外という単語はspyderのバージョンによって違うかもしれない

投稿2020/11/17 01:20

編集2020/11/17 01:24
hentaiman

総合スコア6426

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

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

0

PDBを使う方法があります。
https://docs.python.org/ja/3/library/pdb.html

ただ、初心者の場合はご利用中のIDEの機能を利用してデバッグするのが簡単でしょう。
「python デバッグ方法 xx」というように、利用しているIDEの名称をxxに入れてググると情報が得られるかと思います。
Microsoft社のVisual Codeの場合は「python デバッグ方法 Visual code」と言った形です。
ステップ実行をすることで、そのステップを実行している時の変数の状態などを表示することが可能です。

投稿2020/11/16 00:44

t_obara

総合スコア5488

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

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

0

return [s + [''] * (mx - len(s)) for s in pathlist] #何の戻り値を返しているのか?

の結果を見たいなら、

temp = [s + [''] * (mx - len(s)) for s in pathlist]
print(temp)
return temp

結果をいったん別の変数に代入しとけば、あとはおすきなようにできます

投稿2020/11/15 22:54

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問