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

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

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

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

Q&A

解決済

3回答

749閲覧

python3 文字列配列 組み合わせのコード作成

mao_s_food

総合スコア3

Python

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

0グッド

0クリップ

投稿2020/07/27 06:42

編集2020/07/29 04:02

すみません、初心者中の初心者で、こんなことと思うこともあるかもしれませんが、
お手すきのかたでもしよろしければ助けてください。。。

pytthon3を使っています。

全てアルファベットの小文字で入力された文字列について、
例えば'mother' 'future' ' dream' ' food'のいずれかを
つなぎ合わせることで同じ文字列を作成できるか否かを判定する
プログラムを書きたいのですが、
全く組み立てることすらできません。

motherfood という文字列を投入した場合、これはmother と food
を組み合わせているため作成できるということで 出力が’YES'となるようにします。
foodfoodfoodのように何度使っても可能です。
’abcfuture’のようにどの単語を組み合わせてもできない場合は出力は’NO'となります。
単語内の文字は組み替えることはできません。food→doof は✖️です。
単語と単語の組み合わせでできるかどうかを判断します。

とりあえず

s='mother' 'future' 'dream' 'food'

ということはわかりますがこの後どうすればいいかわかりません。。。
どなたか助けていただけませんでしょうか。
よろしくお願いします。

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

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

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

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

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

can110

2020/07/27 07:05

「motherhood という文字列を投入した場合~」は「motherfood 」の誤字ではないでしょうか?
meg_

2020/07/27 07:10

あなたのコード「s='mother' 'future' 'dream' 'food'」は実行すると「'motherfuturedreamfood'」となりますが、これは本当に意図するものですか?
mao_s_food

2020/07/29 04:01

can110さん。そうです、、、ありがとうございます。 megさん。違いますね、、、ありがとうございます。
guest

回答3

0

ベストアンサー

正規表現を使うとシンプルに判定できます。

Python

1import re 2 3words = ['mother', 'future', 'dream', 'food'] 4ws = '|'.join(words) 5r = re.compile( f'({ws})+') 6for s in ['', ' ', 'mother', 'foodfood', 'motherfood', 'abc', 'doof']: 7 print(f'[{s}]', end=':') 8 print('yes' if r.fullmatch(s) else 'no') 9""" 10[]:no 11[ ]:no 12[mother]:yes 13[foodfood]:yes 14[motherfood]:yes 15[abc]:no 16[doof]:no 17"""

投稿2020/07/27 07:09

編集2020/07/27 08:33
can110

総合スコア38278

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

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

Daregada

2020/07/27 08:10 編集

正規表現が [mother|furure|dream|food]* になるので、「doof」にyesが出てしまいます。 r = re.compile(f'({ws})+') じゃねーかな。
can110

2020/07/27 08:23

あ。だめだめですね… ご指摘ありがとございます。
Daregada

2020/07/27 08:26

ついでに future の綴りを
can110

2020/07/27 08:34

さらにだめだめですね。 ありがとうございます。あわせて修正しました。
mao_s_food

2020/07/29 04:04

ありがとうございます!とても勉強になります!
mao_s_food

2020/07/31 11:12

すみません。一つお尋ねしたいのですが、 for s in ['', ' ', 'mother', 'foodfood', 'motherfood', 'abc', 'doof']: の部分の最初の'' , ' ' にはどんな意味があるのでしょうか。。。? 必要なのかと疑問に思いまして。。。
can110

2020/07/31 12:39

特に意味はありません。空文字、スペースのみでも動作するかのテストデータです。
mao_s_food

2020/08/02 12:32

ありがとうございます。 済みません、別途追加で質問なのですが、 これを任意の文字列を投入したときに yes, noがでるようにするにはどのようにすれば良いのでしょうか。。。。 何どの済みません。
can110

2020/08/02 12:42

投入される文字列をリストにすればよいです。 投入される文字列によるので具体的な回答はできませんが 「input 文字列 リスト」で検索すると参考になる情報が出てくると思います。
guest

0

この後どうすればいいかわかりません。。。

まず、適当に問題を分解して整理します:

text

1- できるか否かを判定する 2 - 全てアルファベットの小文字で入力された文字列について 3 - 次のいずれかをつなぎ合わせることで同じ文字列を作成 4 - 'mother' 5 - 'future' 6 - 'dream' 7 - 'food' 8- 文字列を投入した場合 9 - motherhood 10 - 出力が’YES'となるようにします 11 - mother と food を組み合わせているため作成できるということで 12 - foodfoodfoodのように 13 - 何度使っても可能です。 14- どの単語を組み合わせてもできない場合 15 - 出力は’NO'となります。 16 - ’abcfuture’のように 17- 単語内の文字は組み替えることはできません。 18 - food→doof は✖️です。 19 - 単語と単語の組み合わせでできるかどうかを判断します。

たとえば上記のように、一つ一つが十分簡単になるように整理します
そうしたら、後はできそうなところから順番にプログラミングします

出力が’YES'となるようにします

python

1print("YES")

文字列を投入した場合

python

1input() 2print("YES")

motherhood という

python

1if input() == "motherfood": 2 print("YES")

mother と food を組み合わせているため作成できるということで

python

1if input() == "mother" + "food": 2 print("YES")

このようにしていけば、完成に近づいていきます

投稿2020/07/27 08:00

y_shinoda

総合スコア3272

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

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

mao_s_food

2020/07/29 04:03

しのださん、本当にありがとうございます。 なぜこうなるのかわかりやすく、とても勉強になりました! ありがとうございます!
guest

0

Python

1lst = ['mother', 'future', 'dream', 'food'] 2s = 'motherhood' 3 4se = {True} 5while s != "" and se != set(): 6 se = set() 7 for item in lst: 8 if item in s: 9 s = s[s.find(item)+len(item):] 10 se.add(True) 11 if s == "": 12 print("できた") 13 if se == set(): 14 print("むり") 15 16# むり 17```とかですか?

投稿2020/07/27 07:20

編集2020/07/27 07:21
ForestSeo

総合スコア2720

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

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

mao_s_food

2020/07/29 04:03

forestseoさん、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問