如何在书写模式

时间:2016-12-13 17:04:20

标签: python-2.7 file return

所以我有一个运行良好的项目,唯一的问题是我在文件中写入的返回值。这是我的代码:

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()

换句话说,我需要最后三行

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

但我不能以这种方式使用return,我收到以下错误

  

TypeError:无法连接'str'和'type'对象

1 个答案:

答案 0 :(得分:1)

我不明白你想要在你的功能中完成什么,所以这可能不是你想要的,但你的问题是你在试图写出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']

代码高尔夫:

{{1}}