这就是我的问题
编写一个名为str_redux.py的文件,该文件在不使用任何字符串方法或函数的情况下实现字符串方法find和split的版本。
特别是,定义一个函数myfind,使myfind(s,t)做与s.find(t)相同的事情;和一个函数mysplit,使mysplit(s,t)做与s.split(t)相同的事情。
您的解决方案中不得使用任何字符串方法。所有运营商(包括in,[index],[i1:i2]等)都是公平的游戏。没有任何函数(也不是文件本身)应该打印任何内容,也不要求任何输入。
除功能正确性外,还会为
保留一些要点具有良好的变量名称 为您编写的所有函数提供有意义的文档字符串
def myfind(whole,part):
"""Docstring: searches for a string (whole) for a segment which is (part) and returns the index"""
if part in whole:
for n in range(len(whole)):
sub = whole[n:n+len(part)]
if part in sub: #Use of if-in function to find out if our segment is in our word
return n
break
else:
return -1 # Doesn't exist within the string
def mysplit(whole, part):
"""Docstring: when given a word, will seperate the word into predetermined chunks"""
split_word = []
position_start = 0
while part in whole [position_start::]:
new_position = myfind(whole,part)
split_segment = whole[position_start: new_position+position_start]
split_word.append(split_segment)
if new_position == -1:
break
position_start = new_position+len(part)+position_start
split_word.append(whole[position_start:])
return split_word
当我测试时:
import str_redux
print(str_redux.myfind('divided','d'))
print(str_redux.myfind('divided','id'))
print(str_redux.myfind('divided','ido'))
print()
print(str_redux.mysplit('divided','d'))
print(str_redux.mysplit('divided','id'))
print(str_redux.mysplit('divided','ido'))
我明白了:
0
3
-1
['', '', '', '', '', '', '', '']
['div', 'ed']
['divided']
应该是:
0
3
-1
['', 'ivi', 'e', '']
['div', 'ed']
['divided']
有谁知道我做错了什么?我知道我的错误是在代码的第二部分,但我不知道在哪里。
答案 0 :(得分:1)
此行new_position = myfind(whole,part)
将始终返回0,因为您每次都测试相同的内容。
new_position = myfind(whole[position_start:], part)
我相信你的想法。
答案 1 :(得分:-1)
这是解决问题的另一种方法。
def splitter(mystr, char=','):
var = ''
n = len(mystr)
for idx, i in enumerate(mystr, 1):
if i != char:
var += i
if (i == char) or (idx == n):
yield var
var = ''
res = list(splitter('Hello, this is a test, see if it works!'))
# ['Hello', ' this is a test', ' see if it works!']