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

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

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

Q&A

解決済

2回答

579閲覧

for文で一文字ずつ増やして出力したテキストの一部を、他の文字に置換したい

Plasma

総合スコア17

1グッド

0クリップ

投稿2022/07/29 18:23

編集2022/07/29 18:27

前提

Python,Pythonistaです。

実現したいこと

Python

1Eng = "HONGKONG" 2Ja= "香港行きたいよね" 3 4for i in range(len(Eng)): 5 print(Eng[:i]) 6 7for j in range(len(Eng)): 8 print(Eng[:-j+len(Eng)])

H
HO
HON
HONG
HONGK
HONGKO
HONGKON
HONGKONG
HONGKON
HONGKO
HONGK
HONG
HON
HO
H
こういうものを作りました。

この「各行の最後の文字だけ」を日本語テキストに置換して
こういう風にしたいです。


H港
HO行
HONき
HONGた
HONGKい
HONGKOよ
HONGKONね
HONGKOよ
HONGKい
HONGた
HONき
HO行
H港

香港は何の関係もないです。
しかし「各行の最後の文字だけ」を置換する方法が分かりません。

「.replace( )」を使ってみました。
例えば「H『O』NGKONG」を「H『港』NGKONG」に置き換えようとすると
他の『O』にも反応しちゃうので
結果的に「H『港』NGK『港』NG』になってしまいます。

「.replace( )」ではどうにもならないかも知れません。

「▶︎」←この形の斜め部分が日本語になるように出来れば大丈夫です。

最終的にstr(input( ))でEng,Jaをその都度入力して
文字数が揃えば自動的にこういうのを作ってくれるツールになればいいなと思っているので
全く違うテキストでも対応可能な方法を考えたいです。
力をお貸しいただければとお思います。

melian👍を押しています

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

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

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

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

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

guest

回答2

0

別の考えかた

登りの表示は、「print(Eng[:i])」のようにして一部を表示させているのですから、ここで1文字減らして、「print(Eng[:i-1])」として、日本語文字列のi番目の文字を表示する。
下りも基本、同様ですね。


もとのコードを生かしたやりかたであればということでアドバイスしたのですが、そのコードの動作を勘違いしていたところがあり、変なアドバイスになっちゃってました。

登りのコードは、「何も表示しない」から始まっているので、そのままの表示に日本語文字列を追加すればよさそうですね。
ということで、以下のようなコードを意図してました。

python

1Eng = "HONGKONG" 2Ja= "香港行きたいよね" 3 4for i in range(len(Eng)): 5 print(Eng[:i] + Ja[i]) 6 7for j in range(len(Eng)-1): 8 print(Eng[:-j+len(Eng)-2] + Ja[-j-2])

登りは、英語を表示した後に日本語を1文字ずつ。
下りは、英語の表示を1文字減らして、日本語を1文字ずつ。
文字列は配列のように扱うと、その場所の文字が取り出せることを使ってます。

投稿2022/07/30 04:24

編集2022/07/30 16:26
TakaiY

総合スコア12779

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

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

Plasma

2022/07/30 15:44

Eng = "HONGKONG" for i in range(len(Eng):  print(Eng[:i - 1]) という事でしょうか? i = 0の時 Eng[:-1] → HONGKON i = 1の時 Eng[:0] → なし i = 2の時 Eng[:1] → H ... となって HONGKON H HO HON HONG HONGK HONGKO というような出力結果になりました。
TakaiY

2022/07/30 16:16

もとのコードがどういう表示をしているのか確認してなかったので、ちょっと変なアドバイスになっちゃいました。 ちゃんと考えて追記しました。
Plasma

2022/08/07 15:17

今後自分でインデックス番号の記述を考えて書けるどうかはまだ自信がないですが どんな意味かは把握できました。 追記ありがとうございます。
guest

0

ベストアンサー

python

1Eng = "HONGKONG" 2Ja= "香港行きたいよね" 3 4text = [Eng[:i] + Ja[i] for i in range(len(Eng))] 5print('\n'.join(text + text[-2::-1]))

投稿2022/07/29 19:44

melian

総合スコア19825

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

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

Plasma

2022/07/30 15:57

'\n'.join( ) は初めて知りました。非常に使い勝手がいいですね。 インデックス番号の指定というか[開始値:修了値:間隔]の値に変数が入ったり マイナスの値が入ったりするのがややこしくて混乱していたため 数時間紙に色々書いてようやく理解しました。 リスト内でfor文を書いて変数に代入できるとは知らなかったので、意味が分かって感心しました。 かなりコンパクトなスクリプトですね。ありがとうございます。勉強頑張りたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問