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

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

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

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

Python

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

Q&A

解決済

4回答

877閲覧

pythonで九九を表示させたいです

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

1グッド

0クリップ

投稿2022/02/14 17:33

python

1コード 2```number = [] 3z = [] 4for x in range(1,10): 5 for y in range(1,10): 6 z.append(x * y) 7 number.append(z) 8 9for a in range(9): 10 for b in range(9): 11 print(f"{number[a][b]:3d}",end = "" ) 12 print("") 13 14![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-15/2d1f10af-b3d4-4628-9650-61a6b1fbc0bf.png) 15 16九九を表示させたいのですが、なぜこのように表示されてしまうのでしょうか。 17forの二重ループにリストが加わるとどこに何を書けばいいのか混乱してしまうので、その点を重点的にご教授いただけると幸いです。
dl_md👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

z の初期化を一度しか行っていない事が原因です。

python

1number = [] 2#z = [] 3for x in range(1,10): 4 z = [] # ここで初期化(リセット) 5 for y in range(1,10): 6 z.append(x * y) 7 number.append(z) 8 9for a in range(9): 10 for b in range(9): 11 print(f"{number[a][b]:3d}",end = "" ) 12 print("") 13 14# 15 1 2 3 4 5 6 7 8 9 16 2 4 6 8 10 12 14 16 18 17 3 6 9 12 15 18 21 24 27 18 4 8 12 16 20 24 28 32 36 19 5 10 15 20 25 30 35 40 45 20 6 12 18 24 30 36 42 48 54 21 7 14 21 28 35 42 49 56 63 22 8 16 24 32 40 48 56 64 72 23 9 18 27 36 45 54 63 72 81

投稿2022/02/14 17:44

melian

総合スコア21196

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

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

退会済みユーザー

退会済みユーザー

2022/02/15 07:43

なぜzは何度も初期化を行う必要があるのでしょうか? numberとの違いが分かりません。
melian

2022/02/15 07:48

初期化しないとそれまでに z に追加した要素が全て入ったままになるからです。そして、それらが全て number に追加されていくことになってしまいます。z をリセットすることで1段ずつ追加されて、想定通りに九九の表ができあがることになります。
guest

0

表示させたいだけなら、文字列を連結して表示イメージを作り print すればよいでしょう。

python

1print('\n'.join([''.join([f'{x*y:3d}' for y in range(1,10)]) for x in range(1,10)]))

追記
数値の 2次元リストを作ってから表示したいのであれば、

python

1a = [[x * y for y in range(1,10)] for x in range(1,10)] 2print('\n'.join([''.join([f'{v:3d}' for v in e]) for e in a]))

投稿2022/02/15 00:22

編集2022/02/15 04:40
kazuma-s

総合スコア8222

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

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

0

質問文にあるコードの修正法は他の回答にある通りです。

作業用の変数を初期化してループでデータを追加していく という方法は、間違いをしやすいです。

python では配列データを生成するには、内包表記というのが用意されています。

参考

内包表記を使って書いてみたのが次のコードです。

python3

1ary = [ [x * y for y in range(1, 10)] for x in range(1, 10) ] 2 3for row in ary: 4 for x in row: 5 print(f"{x:3d}", end="" ) 6 print("")

ネストした内包表記なのでわかりにくいかもしれません。
表を表示するコードも少し工夫してみました。 range(9) を使わずに、生成した表データ全体を表示させています。

投稿2022/02/14 20:39

katoy

総合スコア22328

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

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

0

number = []
for x in range(1,10):
z = []
for y in range(1,10):
z.append(x * y)
number.append(z)

for a in range(9):
for b in range(9):
print(f"{number[a][b]:3d}",end = "" )
print("")

投稿2022/02/14 17:47

dl_md

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問