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

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

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

タプルは、順序付けされた複数の要素で構成される組の集合数詞です。元々は数学の概念ですが、PythonやML、Haskellなどのプログラミング言語にはタプルという名称のデータ型が用意されています。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

Q&A

解決済

1回答

1176閲覧

forとタプルでカウンタを進めたい

Giuko

総合スコア1

タプル

タプルは、順序付けされた複数の要素で構成される組の集合数詞です。元々は数学の概念ですが、PythonやML、Haskellなどのプログラミング言語にはタプルという名称のデータ型が用意されています。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

0グッド

0クリップ

投稿2020/06/05 02:57

前提・実現したいこと

Python3.8で数値をリストに代入するプログラムを書いています。
for文とタプルを併用して数値をリストに代入させようとしていますが、数値発生がうまくいきません。

具体的には以下のようなルールで数値を発生させようとしています。

  • 1桁目の数値は数値列のタプルから読み出してその数値までfor文でカウントアップする
  • 2桁目の数値はタプルの数値を一つカウントアップしきったら2桁目用の固定値まで+1させる
  • 3桁目の数値は2桁目を固定値まで使ったら3桁目用の固定値まで+1させる
  • 4桁目も3桁目と同様の挙動

例としてタプルに(2,3,4)を保持させ、2桁目以降の固定値は3とします
1111
1112
1121
1122
1123
1131
1132
1133
1134
1211
1212
1221
1222
1223
1231
1232
1233
1234
1311
1312
.
.
.
という数値列を発生させたいです。

該当のソースコード

id_number = 1 tuple1 = (2,3,4) for i1 in range(3): for i2 in range(3): for i3 in range(3): for i_tuple in tuple1: for i4 in range(i_tuple): code = 'list_{} = list([{},{}])'.format(id_number,\ (i1+1)*1000 + (i2+1)*100 + (i3+1)*10 + i4+1, id_number) exec(code) id_number += 1

試したこと

Python3.8.3

1for i4 in range(i_tuple): 2 code = 'list_{} = list([{},{}])'.format(id_number, (i1+1)*1000 + (i2+1)*100 + (i3+1)*10 + i4+1, id_number) 3 exec(code) 4 id_number += 1 5i3 += 1 6

これでは1133, 1134 まではうまく進むのですが、このあと1121に戻ってしまいます。

上述の数値列を生み出す上手い方法がありましたらご教授願いますでしょうか。よろしくお願いします。

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

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

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

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

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

sfdust

2020/06/05 04:15 編集

2番目の前提「2桁目の数値はタプルの数値を一つカウントアップしきったら2桁目用の固定値まで+1させる」について、確認させてください。 ・「2桁目の数値は」の部分 これは、出力する文字列を4桁目→1桁目 の順で「ABCD」としたときに 2桁目の数値すなわち「C」の位置に該当する数字という理解でよろしいでしょうか。 ・「タプルの数値を一つカウントアップしきったら2桁目用の固定値まで+1させる」の部分 これの意味は、「タプル(例では(2,3,4))を『1桁目(D)の計算において』カウントアップする都度(=1桁目が1,2/1,2,3/1,2,3,4/1,2/1,2,3/....と変化させる場合の「/」のタイミングで)」「2桁目用の固定値(例では「3」)まで+1させる」 という意味でしょうか?
Giuko

2020/06/05 04:52

・「2桁目の数値は」の部分 → その認識で合っています ・「タプルの数値を一つカウントアップ… → その認識で合っています
guest

回答1

0

ベストアンサー

提示のコードだと、1桁目のタプルの数え上げ処理(1,2,1,2,3,1,2,3,4)が1巡するまで2桁目以降がカウントアップしません。
タプルから取得した数値でrangeを取っている一番深いループが1周した時点で2桁目以降のカウントアップをする必要があるでしょう。

2桁の簡単な例:

python

1t = (2,3,4) 2i2 = 1 # 2桁目の初期値 3while True: # 無限繰り返し 4 for it in t: 5 for i1 in range(1,it+1): 6 print(i2,i1,sep='') 7 # タプル中の1つの数値を処理しきった時点で桁上げ処理 8 i2 += 1

2桁目以降は上限3で4になったら桁が繰り上がる、のを繰り返せばよいでしょう。
2桁目以降の数値が全部上限に達したらwhileをbreakしてやれば終了です。

投稿2020/06/05 03:24

hope_mucci

総合スコア4447

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

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

Giuko

2020/06/05 05:00

ありがとうございます。 ご教授いただいたコードを試してみましたが、これでうまくいきそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問