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

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

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

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

Q&A

解決済

2回答

1183閲覧

1行目より2行目は1文字多く、…4行目は3行目より1文字多く表示する方法

ace99

総合スコア5

Python

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

0グッド

0クリップ

投稿2021/11/12 10:49

前提・実現したいこと

pythonで、
「ABCDE FGHIJK LMNOPQR STUVWXYZ」
と1行目より2行目は1文字多く、…4行目は3行目より1文字多くというように表示するには、どうしたら良いですか?
よろしくお願いいたします。

該当のソースコード

python

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

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

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

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

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

guest

回答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
  • mn はともに1以上なので、mnはともに11以下
  • よって、m を 1以上11以下になるようにループさせ、都度、nn = 12 - m で算出すれば各行の文字数が求められる。
  • mn から決まる各行の文字数で、 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

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

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

0

  • "ABCD...XYZ" の文字列の、a番目からb文字を表示する方法を調べる
  • 整数 n から始まり、1ずつ増えるようなループ変数を持つループの書きかたをしらべる。

でできるでしょう。

投稿2021/11/12 10:57

TakaiY

総合スコア12832

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問