2016-12-13 7 views
-1

このプロジェクトはうまく動作しますが、唯一の問題はファイル内に書き込まれる戻り値です。ここに私のコードです:私はまだ書き込みモードで「戻り値」を使用する方法

return output+write_substrings_to_file(s[1:],filename) 
why.write(return) 
why.close() 

私は、このような方法でリターンを使用することはできませんように、最後の3行が必要つまり

def write_substrings_to_file(s,filename): 
if type(s) != str: 
    raise TypeError ("You have entered something other than a sting, please enter a string next time!") 
if s=="" or filename=="": 
    raise ValueError 
why=open(filename,"wt") 
output="" 
if len(s)==1: 
    return s[0] 
for i in range(0,len(s)): 
    for n in range(0,len(s)): 
     output+=s[i:n+1] 
    break 
return output+write_substrings_to_file(s[1:],filename) 
why.write() 
why.close() 

、私は次のエラーを取得

TypeError: cannot concatenate 'str' and 'type' objects

+0

機能が何をすべきか説明できますか? – mitoRibo

+0

私たちは入力には、次の書き込み、ファイルを開く 'ABC' であるとしましょう: C は別の説明 AB ABC B BCを、入力:偉大 グラム GR GRE のGreA 素晴らしい R 再 レア reat 電子 EA トン で を食べて、そのファイルを保存し、他の事は時間があります再帰関数として – Enigma

答えて

1

私はあなたの機能で達成しようとしていることを理解していないので、これはあなたが望むものではないかもしれませんが、あなたの問題はあなたが望むと思うときには機能であるreturnを書き出そうとしているあなたの代わりに再帰的に構築してから返す文字列を書くこと:質問を説明するための

my_ret = output+write_substrings_to_file(s[1:],filename) 
why.write(my_ret) 
why.close() 
return my_ret 

おかげで、これは私が使用するコードです:

def my_write(s, ind = 0, step = 1): 
    ret = [] 

    if ind+step <= len(s): 
     ret.append(s[ind:ind+step]) 
     step += 1 
    else: 
     step = 1 
     ind += 1 

    if ind < len(s): 
     ret += my_write(s,ind,step) 

    return ret 

ret = my_write('abc') 
print ret #<- outputs ['a', 'ab', 'abc', 'b', 'bc', 'c'] 

とコードゴルフのために:

def break_word(s): 
    ret = [s[:x] for x in range(1,len(s)+1)] 
    ret += break_word(s[1:]) if len(s) > 1 else [] 
    return ret 

ret = break_word('abc') 
print ret #<- outputs ['a', 'ab', 'abc', 'b', 'bc', 'c'] 
関連する問題