2重リスト内包を用いた九九の演算表のプログラムですが、きれいに成形できません。
以下コード
def main(n): print(" ",end="") for i in range(1,n+1): print('%4d'%(i)," ",end="") print('\n') for j in range(1,n+2): print('-----+',end="") print('\n') l = [[x * y for x in range(1,n)] for y in range(1,n)] return l print(enumerate(''.join(main(5)))) for j in range(1,n+2): print('-----+',end="")
以下出力
1 2 3 4 5 -----+-----+-----+-----+-----+-----+ Traceback (most recent call last): print(enumerate(''.join(main(5)))) TypeError: sequence item 0: expected str instance, list found
理想の出力は以下のようなものです
1 2 3 4 5 6 7 8 9 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 1 | 1 2 3 4 5 6 7 8 9 2 | 2 4 6 8 10 12 14 16 18 3 | 3 6 9 12 15 18 21 24 27 4 | 4 8 12 16 20 24 28 32 36 5 | 5 10 15 20 25 30 35 40 45 6 | 6 12 18 24 30 36 42 48 54 7 | 7 14 21 28 35 42 49 56 63 8 | 8 16 24 32 40 48 56 64 72 9 | 9 18 27 36 45 54 63 72 81 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
リストの要素から数字のみを取り出すためにjoin関数を使う必要があると思うのですが、enumerateを使用する場合は必要ないのでしょうか?
試行錯誤しましたが手詰まりなので力を貸してください。
試行錯誤し、あとはリスト内の要素を数字だけ抜き出すのみなのですが以下のコードでprintする際にjoinを用いてもエラーが起きます。
def main(n): print(" ",end="") for i in range(1,n+1): print('%4d'%(i)," ",end="") print('\n') for j in range(1,n+2): print('-----+',end="") print('\n') l = [[i * j for i in range(1,n+1)] for j in range(1,n+1)] for z,number in enumerate(l,1): print(z,'|',number) for j in range(1,n+2): print('-----+',end="")
出力
1 2 3 4 5 -----+-----+-----+-----+-----+-----+ 1 | [1, 2, 3, 4, 5] 2 | [2, 4, 6, 8, 10] 3 | [3, 6, 9, 12, 15] 4 | [4, 8, 12, 16, 20] 5 | [5, 10, 15, 20, 25] -----+-----+-----+-----+-----+-----+
> エラーメッセージ
と表示するようなコードは見当たりませんが、本当にそういう結果が表示されたんでしょうか
二重リスト内包って何でしょうか。
内包表記を使っているようではありませんし、ひょっとして俗に言う二次元リストのことですか?
入力するコードを間違えていましたが修正しました。
インデントがおかしいですよ。いや、最後のforブロックがそもそも不要なのか。
ところで前の質問は解決したのでしょうか?
https://teratail.com/questions/196902
前の質問は解決しました。
試行錯誤した結果を更新しました。
