【发布时间】:2021-03-17 08:47:05
【问题描述】:
我正在尝试做一个代码战测验,它需要输入一串文本,分解骆驼大小写,并将它们分成一个单词列表,我期待结果是
['break', 'Camel', 'Case', 'Ez']
但我无法弄清楚我的代码的哪一部分导致了问题
word_list = []
def solution(s):
global word_list
if any([char.isupper() for char in s][1:]):
# print([char.isupper() for char in s][1:])
for i, char in enumerate(s):
if i == 0:
continue
if char.isupper():
word_list.append(s[:i])
solution(s[i:])
else:
word_list.append(s)
return word_list
# print("breakCamelCaseEz")
print(solution("breakCamelCaseEz"))
我得到的结果是
['break', 'Camel', 'Case', 'Ez', 'CamelCase', 'Ez', 'breakCamel', 'Case', 'Ez', 'breakCamelCase', 'Ez']
还有 当我尝试向试图查找问题的函数添加计数器时,我遇到了更多问题
word_list = []
indexing = 0
def solution(s):
global word_list, indexing
indexing += 1
if any([char.isupper() for char in s][1:]):
print([char.isupper() for char in s][1:])
# break it down
for i, char in enumerate(s):
if i == 0:
continue
if char.isupper():
word_list.append(s[:i])
print("{}-{}".format("loop", indexing))
solution(s[i:])
else:
print("{}-{}-{}".format("else", indexing, s))
word_list.append(s)
return word_list
# print("breakCamelCaseEz")
print(solution("breakCamelCaseEz"))
我已经多次阅读代码,但仍然无法弄清楚
*编辑第一部分
【问题讨论】:
-
请解释您希望理想结果是什么以及它与您的问题中显示的结果有何不同
-
“我正在尝试做一个代码战测验”- 你能说说这个问题到底是什么吗?
-
每次你看到一个大写字母时你都在递归(除了开头)。所以
solution("fooBarBaz")会调用solution("BarBaz")和solution("Baz")和solution("BarBaz")也会调用solution("Baz")。所以solution("Baz")被调用了两次,Baz两次出现在列表中。此外,在solution("fooBarBaz")调用solution("Baz")之前,它会将"fooBar"添加到列表中,这是错误的,因为那是两个词。据我所知,递归在这里没有任何用处,只会混淆事物。您应该尝试仅使用循环来实现。 -
即使你要得到一个递归解决方案,你也不应该使用全局变量,而是最好返回
word_list.extend(solution(s[i:]))的结果
标签: python