前提・実現したいこと
pythonで、
「ABCDE FGHIJK LMNOPQR STUVWXYZ」
と1行目より2行目は1文字多く、…4行目は3行目より1文字多くというように表示するには、どうしたら良いですか?
よろしくお願いいたします。
該当のソースコード
python
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
以下のように考えました。
- 1行目の文字数を
m
個 とすると、2行目はm+1
個 - 3行目の文字数を
n
個 とすると、4行目はn+1
個 - 従って4行の文字数の合計は、
m + (m+1) + n + (n+1)
すなわち2(m + n + 1)
個 - 一方、
'A'
から'Z'
までの文字数は26個なので、2(m + n + 1) = 26
が成り立つ。両辺を2で割ればm + n + 1 = 13
となり、m + n = 12
m
とn
はともに1
以上なので、m
とn
はともに11
以下- よって、
m
を 1以上11以下になるようにループさせ、都度、n
をn = 12 - m
で算出すれば各行の文字数が求められる。 m
とn
から決まる各行の文字数で、ABCDEFGHIJKLMNOPQRSTUVWXYZ
から部分文字列を作って、改行でjoinすれば、求める4行のテキストが得られる。
この考え方で作ったサンプルが以下です。
python
1from string import ascii_uppercase as AtoZ 2 3for m in range(1, 12): 4 n = 12 - m 5 6 lines = [] 7 pos = 0 8 for length in [m, m+1, n, n+1]: 9 lines.append(AtoZ[pos:pos+length]) 10 pos += length 11 12 print(f'#{m}') 13 print('\n'.join(lines)) 14 print() 15
???? tera: 369035@repl.it
実行すると、以下のように、条件を満たす4行のテキストが11通り出力されます。
shell
1#1 2A 3BC 4DEFGHIJKLMN 5OPQRSTUVWXYZ 6 7#2 8AB 9CDE 10FGHIJKLMNO 11PQRSTUVWXYZ 12 13#3 14ABC 15DEFG 16HIJKLMNOP 17QRSTUVWXYZ 18 19#4 20ABCD 21EFGHI 22JKLMNOPQ 23RSTUVWXYZ 24 25#5 26ABCDE 27FGHIJK 28LMNOPQR 29STUVWXYZ 30 31#6 32ABCDEF 33GHIJKLM 34NOPQRS 35TUVWXYZ 36 37#7 38ABCDEFG 39HIJKLMNO 40PQRST 41UVWXYZ 42 43#8 44ABCDEFGH 45IJKLMNOPQ 46RSTU 47VWXYZ 48 49#9 50ABCDEFGHI 51JKLMNOPQRS 52TUV 53WXYZ 54 55#10 56ABCDEFGHIJ 57KLMNOPQRSTU 58VW 59XYZ 60 61#11 62ABCDEFGHIJK 63LMNOPQRSTUVW 64X 65YZ
投稿2021/11/12 14:53
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。