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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1245閲覧

【Python3】文字列の操作

TON-B

総合スコア21

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/17 07:21

前提・実現したいこと

【文字列の操作について】

下のプログラムはリストboxから無作為に取り出した文字列が

"ABCDE" であれば「一致しています」

それ以外であれば「一致していません」

と表示するプログラムです。

このプログラムを変更してどの文字列が取り出されても

you = "ABCDE"

になるようにしたいと考えています。
ただし、目的は「文字列の操作」であるため

・文字列を取り出した後に「you = "ABCDE"」と変数を変更しない

とします。

リストbox内の文字列はすべて "ABCDE" の並び順を変えたものです。
「最前列の文字を最後尾に移動して、それ以外の文字は1つずつ前に位置をずらす」
という処理を0回から4回行ったものになります。

例えば、"CDEAB"は2回並び順の操作が行われた文字列です。

ここでどの文字列が取り出されても"ABCDE" にしたい場合、どのような関数にしたらよいでしょう。

コード

Python

1import random 2model = "ABCDE" 3box = ["ABCDE","BCDEA","CDEAB","DEABC","EABCD"] 4you = random.choice(box) 5 6#ここに関数を書き込みます 7 8if model == you: 9 print("一致しています!") 10 11else: 12 print("一致していません!")

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

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

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

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

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

quickquip

2019/05/17 07:51 編集

you = "ABCDE" としない理由がわかりません。課題かなにかなら「これこれを使ってやりなさい」という指定かなにかが、そうでないなら、あなたが「こういう風にやりたい」という気持ちがあるはずですのでそれを書いてもらえるといいかと思います。(課題ならヒント程度しか回答がつかないでしょうけれども)
tiitoi

2019/05/17 07:34

質問の意図がよくわからないのですが、選ばれた文字列から「最前列の文字を最後尾に移動する処理」を何回繰り返すと、「ABCDE」になるかを求めたいという事でしょうか?
overdoser

2019/05/17 07:48

おっPyの文字列はimmutableだから、何らかの方法で目的となる文字列を生成してyou変数(の参照先)を変更する以外に目的を達成する方法はないよ。課題だとしたら、あなたが意図を理解できていないか、せんせーがおっPyを理解できていないかのどちらかだから確認したほうが良い
TON-B

2019/05/17 07:50 編集

>>quiqui様 質問の目的を書いていませんでしたね。 失礼しました。課題ではありません。 私はPython初心者です。 現在、文字列の操作を勉強していて「この場合の操作はどうやるんだろう?」とふと考えたものを質問しました。 >>tiitoi様 そうですね。 正確には"ABCDE"になるために「最前列の文字を最後尾に移動する処理を自動で繰り返し行う」ような関数を作りたいと考えています。回数自体は求めていません。
tiitoi

2019/05/17 07:53

回数を求めたいのでなければ、なぜそのような処理をしたいのか理解できません。 overdoser さんがご指摘されてるように Python の文字列は一度作ったら、あとから変更することはできません。
guest

回答3

0

a.py

python3

1def rotate_left(str): 2 return str[1:] + str[0] 3 4def rotate_auto(str, target): 5 if len(str) == 0: 6 return str 7 8 if target != str: 9 for c in range(0, len(str)): 10 str = rotate_left(str) 11 # print(" " + str) 12 if target == str: 13 return str 14 15 return str 16 17model = "ABCDE" 18box = [ 19 "ABCDE", "BCDEA", "CDEAB", "DEABC", "EABCD", 20 "AABCD", "ACBDE", "" 21] 22 23for s in box: 24 you = rotate_auto(s, model) 25 26 if model == you: 27 print(s, "は一致させることができました") 28 else: 29 print(s, "は一致させれません")

実行例:
イメージ説明

投稿2019/05/17 22:35

katoy

総合スコア22324

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

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

0

正確には"ABCDE"になるために「最前列の文字を最後尾に移動する処理を自動で繰り返し行う」ような関数を作りたいと考えています。回数自体は求めていません。

文字列長が5で、かつ 'BCDEABCDE' に含まれるか判定すれば良いです。
その条件を満たすとき 'ABCDE' を返す関数を組んでおしまいです。

投稿2019/05/17 08:39

LouiS0616

総合スコア35660

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

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

0

ベストアンサー

学校の課題か何かでしょうか。丸投げの質問だと思います。
自分で解いてほしいのでヒントだけ。

you = "ABCDE" と直接定数を代入せずに、ということは、 box のどの値が入力されても "ABCDE" を返す関数があればいいんですよね?
例えば、 "BCDEA" という文字列だったときに、 "BCDE" + "A" と分解して入れ替えれば "A" + "BCDE" になるはずです。
A がどこにあるかわかれば、こういう分解はできますよね。

投稿2019/05/17 07:55

mather

総合スコア6753

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問