英文:
Iteration does not work for double characters?
问题
"Beginner here. I'm having problems with this task: accum("hello") should return "H-Ee-Lll-Llll-Ooooo". But what I get with my code is "H-Ee-Lll- Lll -Ooooo". It doesn't work for double characters. Is this because the iteration variable in "for i in s" "skips" over double "i's" or something? And do you have an idea how I can fix this? I'm not striving for elegant code or something, my goal atm is to try and make easily readable lines for myself
Thank you!
(Sorry if this is something basic, I didn't really know what to search for!)"
def accum(s):
s_list = []
s = [ele for ele in s]
for i in s:
sum_ind = ((s.index(i)) + 1) * i
s_list.append(sum_ind)
s_list = [e.capitalize() for e in s_list]
s_list = '-'.join(s_list)
return s_list
请注意,上面的代码段并没有修改,仅提供了原始的代码部分。
英文:
Beginner here. I'm having problems with this task: accum("hello") should return "H-Ee-Lll-Llll-Ooooo". But what I get with my code is "H-Ee-Lll- Lll -Ooooo". It doesn't work for double characters. Is this because the iteration variable in "for i in s" "skips" over double "i's" or something? And do you have an idea how I can fix this? I'm not striving for elegant code or something, my goal atm is to try and make easily readable lines for myself
Thank you!
(Sorry if this is something basic, I didn't really know what to search for!)
def accum(s):
s_list = []
s = [ele for ele in s]
for i in s:
sum_ind = ((s.index(i)) + 1) * i
s_list.append(sum_ind)
s_list = [e.capitalize() for e in s_list]
s_list = '-'.join(s_list)
return s_list
答案1
得分: 3
这是一种方法:
def accum(stri):
p = []
for i, s in enumerate(stri, 1):
p.append((s*i).capitalize())
return '-'.join(p)
accum('hello')
'H-Ee-Lll-Llll-Ooooo'
快速了解一下:enumerate
英文:
Here's a way to do:
def accum(stri):
p = []
for i, s in enumerate(stri, 1):
p.append((s*i).capitalize())
return '-'.join(p)
accum('hello')
'H-Ee-Lll-Llll-Ooooo'
Take a quick read about: enumerate
答案2
得分: 0
这是一种方法:
def accum(s):
return "-".join((c * i).capitalize() for i, c in enumerate(s, 1))
生成的结果是:
'H-Ee-Lll-Llll-Ooooo'
英文:
Here is one way:
def accum(s):
return "-".join( (c*i).capitalize() for i,c in enumerate(s,1) )
yields:
'H-Ee-Lll-Llll-Ooooo'
答案3
得分: 0
我认为你可以使用 enumerate
轻松解决这个问题:
def accum(s):
r = []
for i, letter in enumerate(s):
r.append(letter.upper() + (letter*i).lower())
return '-'.join(r)
英文:
I think you could solve this easily with enumerate
:
def accum(s):
r = []
for i, letter in enumerate(s):
r.append(letter.upper() + (letter*i).lower())
return '-'.join(r)
答案4
得分: 0
正如许多评论中提到的,我们可以在这里简要解释 enumerate
的工作原理。
根据您的要求,给定字符串中的一个字母,您要找到它的索引(位置)。然后,您首先将该字母变成大写,并与小写字母连接 index 次。
因此,您需要一个计数器来跟踪字母的位置,这样我们可以像这样做(一个虚拟的、慢速的示例):
def accum(word):
ans = ""
for index in range(len(word)):
letter = word[index]
ans += letter.upper() + index * letter + "-"
else:
word = word[:-1] # 去除末尾的 '-'
return word
但是这个函数非常慢。因为它使用了简单的字符串相加,而不是其他适当的方法。
这就是为什么人们建议您使用 enumerate
。简而言之,它跟踪您的索引。
for index, name in enumerate(["John", "Lex", "Vui"]):
print(name, "is found at", index)
就是这样!
{我没有提供您想要的答案,因为几乎每个人都提供了他们所能提供的最佳答案,我的目的是向您解释如何使用 enumerate 和其他慢速方法来解决您的问题}
英文:
As mentioned in many comments, we can give a short explanation of working of enumerate
here.
As per your requirement, given a letter from a string, you find its index (position). Then you first make the caps of letter and glue it with index-times small letters.
So you need a counter which keeps track of the position of letter, so we can do something like this (A DUMMY, SLOW EXAMPLE):
def accum(word):
ans = ""
for index in range(len(word)):
letter = word[index]
ans += letter.upper() + index*letter + "-"
else:
word = word[:-1] #Remove trailing '-'
return word
BUT THIS FUNCTION IS EXTREMELY SLOW. BECAUSE IT USES SIMPLE STRING ADDITION AND NOT OTHER PROPER METHOD.
That's why people ask you to use enumerate
. In short it keeps track of your indices.
for index, name in enumerate(["John", "Lex", "Vui"]):
print(name, "is found at", index)
That's it !
{Im not writing the answer you wanted, as almost everyone provided the best answer, they could, my aim was to explain you the use of enumerate and other slow methods for your problem}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论