qq_遁去的一_1
我发现了问题所在。线start = start + 1应该在最后一个 else 语句中的位置。所以我的代码看起来像这样,并为我提供了上面指定的所需输入:def tokenize(lines): words = [] for line in lines: start = 0 while start < len(line): while line[start].isspace(): start = start + 1 end = start if line[start].isalpha(): while line[end].isalpha(): end = end + 1 word = line[start:end] word = word.lower() words.append(word) start = end elif line[start].isdigit(): while line[end].isdigit(): end = end + 1 word = line[start:end] words.append(word) start = end else: word = line[start] words.append(word) start = start + 1 return words但是,当我使用下面的测试脚本来确保没有遗漏函数“tokenize”的极端情况时;...import ioimport sysimport importlib.utildef test(fun,x,y): global pass_tests, fail_tests if type(x) == tuple: z = fun(*x) else: z = fun(x) if y == z: pass_tests = pass_tests + 1 else: if type(x) == tuple: s = repr(x) else: s = "("+repr(x)+")" print("Condition failed:") print(" "+fun.__name__+s+" == "+repr(y)) print(fun.__name__+" returned/printed:") print(str(z)) fail_tests = fail_tests + 1def run(src_path=None): global pass_tests, fail_tests if src_path == None: import wordfreq else: spec = importlib.util.spec_from_file_location("wordfreq", src_path+"/wordfreq.py") wordfreq = importlib.util.module_from_spec(spec) spec.loader.exec_module(wordfreq) pass_tests = 0 fail_tests = 0 fun_count = 0 def printTopMost(freq,n): saved = sys.stdout sys.stdout = io.StringIO() wordfreq.printTopMost(freq,n) out = sys.stdout.getvalue() sys.stdout = saved return out if hasattr(wordfreq, "tokenize"): fun_count = fun_count + 1 test(wordfreq.tokenize, [], []) test(wordfreq.tokenize, [""], []) test(wordfreq.tokenize, [" "], []) test(wordfreq.tokenize, ["This is a simple sentence"], ["this","is","a","simple","sentence"]) test(wordfreq.tokenize, ["I told you!"], ["i","told","you","!"]) test(wordfreq.tokenize, ["The 10 little chicks"], ["the","10","little","chicks"]) test(wordfreq.tokenize, ["15th anniversary"], ["15","th","anniversary"]) test(wordfreq.tokenize, ["He is in the room, she said."], ["he","is","in","the","room",",","she","said","."]) else: print("tokenize is not implemented yet!") if hasattr(wordfreq, "countWords"): fun_count = fun_count + 1 test(wordfreq.countWords, ([],[]), {}) test(wordfreq.countWords, (["clean","water"],[]), {"clean":1,"water":1}) test(wordfreq.countWords, (["clean","water","is","drinkable","water"],[]), {"clean":1,"water":2,"is":1,"drinkable":1}) test(wordfreq.countWords, (["clean","water","is","drinkable","water"],["is"]), {"clean":1,"water":2,"drinkable":1}) else: print("countWords is not implemented yet!") if hasattr(wordfreq, "printTopMost"): fun_count = fun_count + 1 test(printTopMost,({},10),"") test(printTopMost,({"horror": 5, "happiness": 15},0),"") test(printTopMost,({"C": 3, "python": 5, "haskell": 2, "java": 1},3),"python 5\nC 3\nhaskell 2\n") else: print("printTopMost is not implemented yet!") print(str(pass_tests)+" out of "+str(pass_tests+fail_tests)+" passed.") return (fun_count == 3 and fail_tests == 0)if __name__ == "__main__": run()...我得到以下输出:/usr/local/bin/python3.7 "/Users/ericjohannesson/Documents/Fristående kurser/DAT455 – Introduktion till programmering med Python/lab1/Laborations/Laboration_1/test.py"Traceback (most recent call last): File "/Users/ericjohannesson/Documents/Fristående kurser/DAT455 – Introduktion till programmering med Python/lab1/Laborations/Laboration_1/test.py", line 81, in <module> run() File "/Users/ericjohannesson/Documents/Fristående kurser/DAT455 – Introduktion till programmering med Python/lab1/Laborations/Laboration_1/test.py", line 50, in run test(wordfreq.tokenize, [" "], []) File "/Users/ericjohannesson/Documents/Fristående kurser/DAT455 – Introduktion till programmering med Python/lab1/Laborations/Laboration_1/test.py", line 10, in test z = fun(x) File "/Users/ericjohannesson/Documents/Fristående kurser/DAT455 – Introduktion till programmering med Python/lab1/Laborations/Laboration_1/wordfreq.py", line 44, in tokenize while line[start].isspace():IndexError: string index out of range为什么说字符串索引超出范围?我该如何解决这个问题?