2016-11-01 14 views
2

質問は次のとおりです。ループがどのように機能するのかを勉強しようとしていますが、何がうまくいかないのですか?

文字列を指定すると、元のすべての文字に対して2つの文字が含まれる文字列を返します。

これは私の試みです:私はそれを実行すると、それだけで最初の文字の2つのバージョンを返し、適切にループをしません

def double_char(str): 
    n = 0 
    for x in range(0, len(str)): 
     return 2*str[n] 
     n = n+1 

。したがって、double_char(Hello)の場合は、単にHHを返します。

何が問題になりますか?助けを借りてくれてありがとう、本当に初心者の質問には申し訳ありません。

+1

'return' *は一度到達した呼び出し元に制御を戻し、あなたの' for'ループを途中で終了します –

+0

私はその場所に何を入れますか?なぜなら、printbatを使用すると、コードが返されることがわかっているからです。 – thornbird

+0

@thornbirdループの上には、それぞれの重複した文字を追加する文字列があり、ループの後の文字列を返します。 – Carcigenicate

答えて

1

戻り値は最初の文字列の2を返すように、関数が最初の繰り返しで戻るようにしています。あなたが書くことを意図している可能性が何

はインクリメンタルそれはちょうど2各文字の文字列を構築

def double_char(s): 
    n = 0 
    r = '' 
    for x in range(0, len(s)): 
     r += 2*s[n] 
     n = n+1 

    return r 

のようなものでした。

(理解力を使って、他の答えを複製することなく)、その関数のすっきりリファクタリングは、あなたはまた、変数名としてstr使用してはならない

def double_char(s): 

    r = '' 
    for c in s: 
     r += 2*c 

    return r 

です。それは組み込み型であり、strという変数を定義することでそれを隠しています。

+0

どうやってそれを定義せずにcを使いましたか?それとも、Cは文字のために短いのですか?私が推測しているのは、組み込みのタイプですか? – thornbird

+0

いいえ、ビルドされていません。 'for c in s:'を参照してください。これは、 's'の上でループを実行し、現在見ている' s'の項目に 'c'という名前を付けることを意味します。あなたは好きなものを呼び出すことができます。私はちょうどs =文字列c = charが分かりやすい短い名前だと思った。 –

+0

それは意味があります。ありがとうございました :) – thornbird

1

return返信呼び出し元に制御が到達したため、forループが途中で終了します。ここで

str.joinであることを行うための簡単な方法です:

def double_char(s): 
    return ''.join(i*2 for i in s) 

>>> s = 'Hello' 
>>> double_char(s) 
'HHeelllloo' 

組み込みstr機能をシャドーイングを避けるために名前としてstrを使用しないでください。

関連する問題