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

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

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

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

Q&A

解決済

3回答

1045閲覧

数字で模様を書きたいです

nekopota.

総合スコア22

Python

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

0グッド

0クリップ

投稿2022/09/26 09:13

編集2022/09/26 11:36

数字で模様を描くプログラミングを作成したいです

Pythonで数字の羅列を表示されたいのですがなかなかうまくプログラミングできないため教えていただきたいです。

実現したいこと

11111111111111111
12222222222222221
12333333333333321
12344444444444321
12345555555554321
12345666666654321
12345677777654321
12345678887654321
12345678987654321
12345678887654321
12345677777654321
12345666666654321
12345555555554321
12344444444444321
12333333333333321
12222222222222221
11111111111111111
と実行したら表示させるプログラムをPythonで作成したいです。

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

該当のソースコード

for i in range(1,10): for j in range(1,10): if i*j<10: print(" ",end=" ") print(i*j,end=" ") if i*j>=10: print(i*j,end=" ") print()

で九九表を作りました。そこから数字を変えようと思ったのですがうまくいきませんでした。アドバイスよろしくお願いします。Python初心者なので九九表のコードも拙いかもしれません。申し訳ないです。

試したこと

9*9の九九表をまず作りそこから完成の形に近づけようとしました。ですがうまくいきませんでした。どのようなコードを書けば良いのか教えていただきたいです。よろしくお願いします。

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

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

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

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

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

shiracamus

2022/09/26 09:40

うまくいかなかったコードを示せば、どこが悪いか教えてもらえると思いますよ。
nekopota.

2022/09/26 11:15

そうなのですね!分かりました!教えていただきありがとうございます🙇‍♀️
TakaiY

2022/09/26 11:22

ソースコードは、<code>を押すと表示される「```」の間の行に書き込むと、インデントが表示のときに保存されて読めるようになります。
nekopota.

2022/09/26 11:32

そうなのですね!知らずにそのまま打ってしまいました。修正します。ご丁寧に教えていただきありがとうございます!助かりました🙇‍♀️
guest

回答3

0

簡単ではありませんね。

まず、手書きでこれを左上から書くとしたとき、どのように書くかを考えて、それをプログラムします。
難しいので、最初は、「12345678987654321」の行までにしましょう。

  • 1行目(0行目)はどのような規則で数字を並べますか?
  • 2行目(1行目)はどのような規則で数字を並べますか?
  • 3行目(2行目)はどのような規則で数字を並べますか?
  • N行目(N-1行目)はどのような規則で数字を並べますか?

これができなければ、プログラムは作れません。
できたら、次は戻りを考えます。

投稿2022/09/26 11:28

編集2022/09/26 11:30
TakaiY

総合スコア12765

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

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

nekopota.

2022/09/26 11:30

規則性を見つけることから始めるのですね、!分かりました!考えながらやってみます!ありがとうございます🙇‍♀️
guest

0

ベストアンサー

質問にコードが書かれていないので、どう書けばよいのかを回答できません。
参考にならないコードなら示せます。

Python

1for i in range(-8, 9): 2 print(''.join(str(9-max(abs(i), abs(j))) for j in range(-8, 9)))

追記
九九表のコードを元にするなら、まず次のコードを書きます。

Python

1for i in range(1, 10): 2 for j in range(1, 10): 3 print(j, end='') 4 print()

i行目は i より大きい数は i にしないといけないので、

Python

1for i in range(1, 10): 2 for j in range(1, 10): 3 if j < i: 4 print(j, end='') 5 else: 6 print(i, end='') 7 print()

1~8列目と同じ数を 8~1列として追加すればいいので、

Python

1for i in range(1, 10): 2 for j in range(1, 10): 3 if j < i: 4 print(j, end='') 5 else: 6 print(i, end='') 7 for j in range(8, 0, -1): 8 if j < i: 9 print(j, end='') 10 else: 11 print(i, end='') 12 print()

1~8行目と同じ表示を 8~1行として追加すればいいので、

Python

1for i in range(1, 10): 2 for j in range(1, 10): 3 if j < i: 4 print(j, end='') 5 else: 6 print(i, end='') 7 for j in range(8, 0, -1): 8 if j < i: 9 print(j, end='') 10 else: 11 print(i, end='') 12 print() 13for i in range(8, 0, -1): 14 for j in range(1, 10): 15 if j < i: 16 print(j, end='') 17 else: 18 print(i, end='') 19 for j in range(8, 0, -1): 20 if j < i: 21 print(j, end='') 22 else: 23 print(i, end='') 24 print()

あとは、これをどうすればもっと簡潔に書けるかを考えてみるのはどうでしょうか?

投稿2022/09/26 10:11

編集2022/09/26 17:22
kazuma-s

総合スコア8224

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

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

nekopota.

2022/09/26 11:14

コードを書いてなくて申し訳ないです。自分が作った九九表のコードを書かせていただきます。 for i in range(1,10): for j in range(1,10): if i*j<10: print(" ",end=" ") print(i*j,end=" ") if i*j>=10: print(i*j,end=" ") print() として実行したら九九表は作れました。しかし数字を変えて作ろうとしましたがうまくいきませんでした。良ければアドバイスお願いします🙇‍♀️
nekopota.

2022/09/26 23:21

詳しくご丁寧にありがとうございます!どのようにしたら短くなるか考えながら頑張ります!本当に助かりました。ありがとうございました🙇‍♀️
guest

0

Numpy を使う場合。

python

1import numpy as np 2 3N = 9 4c = np.array([[N]]) 5for i in range(N, 1, -1): 6 c = np.pad(c, [(1, 1), (1, 1)], constant_values=i-1) 7 8print('\n'.join(''.join(i) for i in c.astype(str))) 9 10# 1111111111111111111 1212222222222222221 1312333333333333321 1412344444444444321 1512345555555554321 1612345666666654321 1712345677777654321 1812345678887654321 1912345678987654321 2012345678887654321 2112345677777654321 2212345666666654321 2312345555555554321 2412344444444444321 2512333333333333321 2612222222222222221 2711111111111111111

投稿2022/09/26 09:34

編集2022/09/26 10:06
melian

総合スコア19803

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

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

nekopota.

2022/09/26 11:08

ありがとうございます!実行してみたら出来ました🙇‍♀️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問