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

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

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

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

Python

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

Q&A

解決済

3回答

507閲覧

(Python)for文を使って関数を出力する方法

tanaka_tarou63

総合スコア9

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/08/06 19:20

前提・実現したいこと

Python初学者で、おそらくかなり初歩的な質問ですが質問させてください。
tenken1_syounin
tenken1_etsuran
tenken2_syounin
tenken2_etsuran
という4つの辞書があり、for文を使用して数字部分を置き換え、各関数を呼び出したいです。
文字列の結合は学習しましたが、関数内の数字を別の関数で置き換える表記方法が分からず、正しい表記方法を教えていただきたいです。

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

File "<ipython-input-101-f75b9ad77ddc>", line 7 for k, v in tenken(i+1)_syounin.items(): #ここをtenken1_syouninと表記する方法が分からない ^ SyntaxError: invalid syntax

該当のソースコード

Python3

1tenken1_syounin = {"伊藤":"博文","黒田":"清隆"} 2tenken1_etsuran = {"山県":"有朋","松方":"正義"} 3tenken2_syounin = {"大隈":"重信","桂":"太郎"} 4tenken2_etsuran = {"西園寺":"公望","山本":"権兵衛"} 5 6for i in range(2): 7 for k, v in tenken(i+1)_syounin.items(): #ここをtenken1_syouninと表記する方法が分からない 8 print(f'点検{i+1}の承認者は{k}{v}です') 9 for k, v in tenken(i+1)_etsuran.items(): 10 print(f'点検{i+1}の閲覧者は{k}{v}です') 11

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

ppaul

2021/08/06 22:43

こういうように辞書を使うと、姓が同じ人が複数いる場合に問題が起こります。 >>> tenken1_syounin = {"伊藤":"博文","伊藤":"美誠"} >>> print(tenken1_syounin) {'伊藤': '美誠'} というように、左側に書いた博文さんが消えてしまいます。それで良いのですか。
tanaka_tarou63

2021/08/08 04:48

ありがとうございます! 名字と名前を別々に取り出す必要があるのですが、その場合はどのように角煮が一般的なのでしょうか?
ppaul

2021/08/08 10:42

やりたいことが、承認者と閲覧者に関する文を出力するだけなら、名字と名前を別々に取り出す必要は無いはずです。 名字と名前を別々に取り出す必要があるということは、別の使い方を想定しているというはずですね。 データ設計(データの持ち方)は、想定される使い方全てを考慮して決めるものです。 その情報がないのでなんともいえません。 しかし、あるデータ設計をもとにアプリを開発して、最後の段階でデータ設計が間違っていたことが発覚した場合には、ほぼ全てのソースコードを修正する必要が発生する場合が多いので、気をつけてデータ設計することをお勧めします。
guest

回答3

0

余談になりますが、データをキーに含ませるのは好みじゃないです。
自分ならこんなかんじで。

python

1tenken = { 2 "syounin":[ 3 [("伊藤","博文"),("黒田","清隆")], 4 [("大隈","重信"),("桂","太郎")] 5 ], 6 "etsuran":[ 7 [("山県","有朋"),("松方","正義")], 8 [("西園寺","公望"),("山本","権兵衛")] 9 ] 10} 11 12print(tenken)

投稿2021/08/06 20:53

takasima20

総合スコア7464

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

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

0

ベストアンサー

普通は、こうです。

Python

1tenken1_syounin = {"伊藤":"博文","黒田":"清隆"} 2tenken1_etsuran = {"山県":"有朋","松方":"正義"} 3tenken2_syounin = {"大隈":"重信","桂":"太郎"} 4tenken2_etsuran = {"西園寺":"公望","山本":"権兵衛"} 5 6tenken_syounin = [tenken1_syounin, tenken2_syounin] 7tenken_etsuran = [tenken1_etsuran, tenken2_etsuran] 8 9 10for i in range(2): 11 for k, v in tenken_syounin[i].items(): 12 print(f'点検{i+1}の承認者は{k}{v}です') 13 for k, v in tenken_etsuran[i].items(): 14 print(f'点検{i+1}の閲覧者は{k}{v}です')

tenken1_syouninのような変数を作らず、直接tenken_syouninに入れるのがさらに普通でしょう。

投稿2021/08/06 19:43

otn

総合スコア85901

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

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

tanaka_tarou63

2021/08/08 04:52

ありがとうございます!リストを二重構造にして取り出すのですね。 初学者のため一般的な書き方が分からず、経験者のアドバイスが本当に助かります、ありがとうございますm(_ _)m
guest

0

takasima20さんの回答に+1です。

変数名に含まれる数字を実行時に変えてアクセスしたいというときは、データの持ち方が間違えているときです。

python

1a1 = [...] 2a2 = [...]

のようなデータになる場合これは、

python

1a = [] 2a.append(...) 3a.append(...) 4 5a[1] 6a[2]

のような形にするべきです。

今回の問題は、 {"伊藤":"博文","黒田":"清隆"}というデータは点検1 の 承認のデータなので、2次元のデータになります。

このデータの実現方法については、どのようにアクセスしたいのかによっていろいろ考えられます。

takasima20さんのデータのように

python

1tenken["syounin"][1]

のようにアクセスするようにする手もあるでしょうし

python

1access["点検1"]["承認"]

のようにアクセスするようにするという手もあるでしょう。

投稿2021/08/07 05:24

TakaiY

総合スコア13792

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

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

tanaka_tarou63

2021/08/08 04:58

ありがとうございます、参考にさせていただきますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問