2016-08-17 5 views
0

2つの文字列を入力として受け取り、2番目の文字列のすべての文字が最初の文字列にあるかどうかを調べるPythonコードを記述しようとしています。そうであれば、出力は2番目の文字列になります。そうでない場合、出力は文字列 "This does not work"です。私はこの手順をさまざまな入力に対してテストしました。通常は動作しますが、必ずしもそうではありません。たとえば、2つの入力がそれぞれ「helo」と「olhe」の場合、「olhe」のすべての文字が「helo」に存在するため、出力は「これは機能しません」、「olhe」にする必要があります。ここでなぜこのコードはすべての入力に対して機能しないのですか

は、なぜこれが動作しない私のコード

def fix_machine(debris,product): 
    n = 1 
    while True: 
      first_element = product[0:n] 
      find_first_element = debris.find(first_element) 
      if first_element == product: 
       return product 
       break 
      n = n + 1 
      if find_first_element == -1: 
       return "This does not work" 
       break 

のですか?

+1

ステップ、それによってそれを書くための代替方法だと知ります。 – Blorgbeard

+0

インデントにはタブとスペースの組み合わせがあります。これはPythonの非常に悪い考えです。スペースのみを使用してコードを修正するようにテキストエディタを設定します。 –

+0

'product [0:n]'は、 'product'の連続した大きな部分を返します。それは個々の文字を生成しません。 –

答えて

0

2番目の文字列のすべてが最初に存在することを厳密に想定している場合、より洗練されたソリューションとしてこれを行うことができます。

def fix_machine(first, second): 
    for character in second: 
     if character not in first: 
      return False 
    return second 

これは、コードの正しい入力を返します。私が踏み込んでいないので、あなたのコードに何が間違っているか完全にはわかりません。

EDIT:アルバートは私の知る限り、あなただけの別の文字を含む2つの文字列を比較したい理解としての彼の

0

を参照して、はるかにエレガントなソリューションを持っています。

これを行うには、両方の文字列をsetに変換することをお勧めします(listとは対照的に)。

def check_string(first_str, second_str): 
    # convert strings to sets in order to compare characters 
    if set(first_string) == set(second_string): 
     return second_str 
    else: 
     return 'This does not work.' 


first_string = 'helo' 
second_string = 'olhe'  
print(check_string(first_string, second_string)) 
# prints True 

first_string = 'helo' 
second_string = 'hello'  
print(check_string(first_string, second_string)) 
# prints True 

first_string = 'helo' 
second_string = 'helofoo'  
print(check_string(first_string, second_string)) 
# prints 'This does not work.' 
0

私が悪かったのかを確認する(あなたはまだ設定IDEを持っていない場合は、多分PyCharmを試してみてください)あなたは、デバッガでそのコードをステップ実行する必要があることに同意するものとします。間違ったことを説明するのは難しいだろうが、それはfirst_element = product[0:n]と関係があると思う。これにより、文字列のますます大きくなる部分が返されます。 2回目の走行では「ol」と表示されます。

はここデバッガで

def fix_machine(debris, product): 
    all_present = all(letter in debris for letter in product) 
    return product if all_present else 'This does not work' 
+0

そのステートメントの先頭に 'return'がありません。 –

+0

@barakmanos私はpython replでテストするのに十分であった。私はOPs関数を模倣するようにそれを更新します。 – freebie

関連する問題