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

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

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

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

Q&A

解決済

1回答

308閲覧

Python3の変数を出力させて過程を見たい。

SmaSTATION

総合スコア29

Python

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

0グッド

0クリップ

投稿2023/05/23 06:50

実現したいこと

下記のプログラムの以下の変数を出力させて様相を見たいです。
(自分なりのプログラムで書き換えたいため。)
見たい変数:k,i,j

前提

とある問題のプログラムを参照させていただいています。

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

print(i) ^ SyntaxError: invalid syntax

該当のソースコード

Python3

1from statistics import median, median_high 2 3def foo(x): 4 return median_high(x) if len(x) % 2 == 0 else median(x) 5 6if __name__ == '__main__': 7 n = int(input()) 8 a = [int(x) for x in input().split(' ')[:n]] 9 print(foo([foo(k) for k in sum([[a[j: i + j + 1] 10 #print(i+j) 11 for j in range(n) if i + j < n] 12 for i in range(n)], [])])) 13#print(i) 14

試したこと

コメントアウトの部分は、自分で入れてみてエラーが出た箇所です。
繰り返し文の感覚で入れてみましたが、文法エラーでした...

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

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

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

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

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

guest

回答1

0

ベストアンサー

こうすると目的どおりになりますか?

python

1 print(foo([foo(k) for k in sum([print(f'{i=} {j=} {i+j=}') or [a[j: i + j + 1] 2 for j in range(n) if i + j < n] 3 for i in range(n)], [])]))

上では、i, jしか表示させていませんが、 foo(k)の前に 「print(f'{k=}') or」を入れればkも表示できます。

print()は forの前の式のところにしか書けず、式は1つしか書けないので、print()がNoneを返すことを利用して、式のところで or でつないで使います。
通常の記述で使うと邪魔なので、調べるときとかデバッグ用途でのみ使うのがいいでしょう。


追記

式をよく見てなくて、内包表記が入れ子になっているの気づいてませんでした。 j は 内側の内包表記の変数なので、内側で表示させる必要がありました。

python

1print(foo([foo(k) for k in sum([print(f'{i=}') or [print(f'{j=}') or a[j: i + j + 1] 2 for j in range(n) if i + j < n] 3 for i in range(n)], [])]))

内側ならiも表示できるので、両方内側で表示してもいいかもしれませんね。

投稿2023/05/23 08:24

編集2023/05/24 02:07
TakaiY

総合スコア12765

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

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

SmaSTATION

2023/05/23 23:25

ご回答いただきありがとうございます。 さっそくプログラムを適用したのですが、「j」に対して定義エラーが出てしまいます...。 <エラー文> Traceback (most recent call last): File "d:/selfpy/chap01/hello.py", line 9, in <module> print(foo([foo(k) for k in sum([print(f'{i=} {j=} {i+j=}') or [a[j: i + j + 1] File "d:/selfpy/chap01/hello.py", line 9, in <listcomp> print(foo([foo(k) for k in sum([print(f'{i=} {j=} {i+j=}') or [a[j: i + j + 1] NameError: name 'j' is not defined 試しに「i」のみで出力したところ、「i」はうまく出力できました。 <適用後のプログラム> from statistics import median, median_high def foo(x): return median_high(x) if len(x) % 2 == 0 else median(x) if __name__ == '__main__': n = int(input()) a = [int(x) for x in input().split(' ')[:n]] print(foo([foo(k) for k in sum([print(f'{i=} {j=} {i+j=}') or [a[j: i + j + 1] for j in range(n) if i + j < n] for i in range(n)], [])])) お手数をおかけしますが、追加で何かご指導いただけると助かります。よろしくお願いいたします。
TakaiY

2023/05/24 02:08

式が間違えていたので、追記でコメントしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問