Python 交替弦格的问题
通过CodeWars网站上的练习,我需要帮助为一个简单的功能指出正确的方向: 编写一个接受 字符串,并返回包含所有偶数索引字符的相同字符串 在每个单词中使用大写字母,以及每个单词中的所有奇数索引字符 下壳。刚才解释的索引是基于零的,所以 第i个索引的零是偶数,因此该字符应为大写 箱子 传入的字符串将仅由字母字符和 空格(“”)。只有存在多个单词时,才会出现空格。 单词将由单个空格(“”)分隔 到目前为止,我掌握的代码如下:Python 交替弦格的问题,python,string,algorithm,function,loops,Python,String,Algorithm,Function,Loops,通过CodeWars网站上的练习,我需要帮助为一个简单的功能指出正确的方向: 编写一个接受 字符串,并返回包含所有偶数索引字符的相同字符串 在每个单词中使用大写字母,以及每个单词中的所有奇数索引字符 下壳。刚才解释的索引是基于零的,所以 第i个索引的零是偶数,因此该字符应为大写 箱子 传入的字符串将仅由字母字符和 空格(“”)。只有存在多个单词时,才会出现空格。 单词将由单个空格(“”)分隔 到目前为止,我掌握的代码如下: def to_weird_case(string): #TODO
def to_weird_case(string):
#TODO
new_string = ''
add = 0
for letter in range(len(string)):
if string[letter] == ' ':
add += 1
new_string += string[letter]
continue
if (letter+add)%2 == 0:
new_string += string[letter].upper()
else:
new_string += string[letter].lower()
print("Returning: " + new_string)
return new_string
我试图迭代每个字母,同时考虑空格,但我不确定如何“跳过”空格,这就是我的函数混乱的原因?如果有人能给我指出正确的方向,那将很有帮助,谢谢。只要创建一个计数器(一个整数变量),它将跟踪你是在偶数索引中还是在奇数索引中。如果遇到空格,计数器将不会递增,从而忽略它
def to_weird_case(string):
#TODO
counter = 0
new_string = ''
add = 0
for letter in range(len(string)):
if string[letter] == ' ':
new_string += string[letter]
continue
# Increment counter only if not space
counter = counter + 1
if (counter)%2 == 0:
new_string += string[letter].upper()
else:
new_string += string[letter].lower()
print("Returning: " + new_string)
return new_string
如果使用枚举函数,可以避免使用计数器
def to_weird_case(string):
#TODO
new_string = ''
for i,letter in enumerate(string):
if string[i] == ' ':
new_string += string[i]
continue
if i%2 == 0:
new_string += string[i].upper()
else:
new_string += string[i].lower()
print("Returning: " + new_string)
return new_string
通过首先使用
str.split
拆分字符串,使用enumerate
转换每个单词以选择偶数和奇数字符,然后在空格上使用str.join
重新连接字符串,可以忽略空格:
def transform_word(s):
return ''.join(x.upper() if i%2==0 else x.lower() for i, x in enumerate(s))
# ^------------^-> ternary operator for alternating
def to_weird_case(string):
return ' '.join(transform_word(s) for s in string.split())
print(to_weird_case('This is a lovely day'))
# ThIs Is A LoVeLy DaY
如果你最终想考虑空格,直接使用<代码> TrasixWord 函数:
print(transform_word('This is a lovely day'))
# ThIs iS A LoVeLy dAy
输出:返回:您好我的名字是aBcDeFgHiJk尝试列表理解:
def my_func(your_string):
x = [ x.upper() if i%2==0 else x.lower() for i,x in enumerate(your_string)]
return ''.join(x)
your_string = 'hello my name is lmurdock12'
print(my_func(your_string))
输出:
HeLlO My nAmE Is lMuRdOcK12
因此,在这个列表理解中,基本上我们使用enumerate()
enumerate获取一个iterable(字符串、列表等)并逐个(i)给出项,其中i为0、1、2、3……等等
因此,在列表理解中,我们检查从iterable string您的列表中返回的项目x
是否对应于i
。所以在hello中,我的名字是lmurdock12
对于h
我将是0
,对于e
我将是1
,依此类推。如果i%2==0
,这意味着我们在列表中保留x.upper()
,否则我们保留x.lower()
最后使用'.join(x)
加入列表,并在需要时返回它
注意:这可以通过使用index()
在不使用枚举的情况下完成,但这会使我们的算法效率有点低,因为我们每次都搜索值并返回索引。最好使用enumerate。您的代码不是真正的Python。您的函数实际上只能有一行代码。这就是Python如此酷的原因
def ToWeirdCase(word):
return ''.join([char.upper() if pos%2==0 else char.lower() for pos, char in enumerate(word)])
嗨,今天早上我遇到了同样的问题,这是我的答案:
def to_weird_case(sentence):
counter = 0 # Counter set to zero, because of the even number fact at zero-ith.
weird_sentence = "" # This is the string we are going to return at the end.
for character in sentence:
if character == " " and counter % 2 == 0:
weird_sentence += character
counter += 1 # Incrementation that will now make each characters before a space to be uppercased.
elif character != " " and counter % 2 == 0:
weird_sentence += character.upper()
else:
weird_sentence += character.lower()
counter += 1
return weird_sentence
我希望它能帮到你。这里有一个有效的解决方案。希望有帮助
def to_weird_case(string)
words = string.split(" ")
words.map do |word|
word.chars.map.with_index {|letter, idx| idx.even? ? letter.upcase : letter.downcase }.join("")
end.join(" ")
end
好问题,有几个好工具可以使用;),在您的情况下,我将使用enumerate代替counterPlus+1来提及enumerate@Damianalattenero您需要返回字符串而不是列表,因此使用join()
还有为什么需要和char!=“
这一行?没用,漂亮的回答!我试图理解列表的理解,但我有点远:/尽可能地学习和使用它。相信我,这会很有帮助的。python中的神奇事物。很好的建议,谢谢,这就是为什么我的答案,上面的一个,是关于专家声音的并行解决方案,总是出现在python问题中。一如既往的回答很好
def to_weird_case(sentence):
counter = 0 # Counter set to zero, because of the even number fact at zero-ith.
weird_sentence = "" # This is the string we are going to return at the end.
for character in sentence:
if character == " " and counter % 2 == 0:
weird_sentence += character
counter += 1 # Incrementation that will now make each characters before a space to be uppercased.
elif character != " " and counter % 2 == 0:
weird_sentence += character.upper()
else:
weird_sentence += character.lower()
counter += 1
return weird_sentence
def to_weird_case(string)
words = string.split(" ")
words.map do |word|
word.chars.map.with_index {|letter, idx| idx.even? ? letter.upcase : letter.downcase }.join("")
end.join(" ")
end