#!/usr/bin/python
# -*- coding: utf-8 -*-
def to_weird_case(string):
lines = string.split()
new_word = ''
new_line = ''
for word in lines:
for item in word:
if word.index(item) %2 ==0:
item = item.upper()
new_word += item
else:
new_word += item
new_line = new_word +' '
return new_line
print to_weird_case('what do you mean')
我想获得WhAt Do YoU MeAn
,而不是WhAtDoYoUMeAn
。我已经添加了行new_line = new_word +' '
。我的问题在哪里?
答案 0 :(得分:2)
首先,每次迭代都会覆盖new_line
。其次,new_word
变得越来越长,因为你从来没有"清楚"它。第三,在整个的末尾添加空格
new_line
,而不是在每个新单词之后(因为第二)。
查看评论
def to_weird_case(string):
lines = string.split()
new_line = ''
for word in lines:
new_word = '' # start new word from an empty string
for item in word:
if word.index(item) %2 ==0:
item = item.upper()
new_word += item
else:
new_word += item
print new_word
new_line = new_line + new_word + " " # add new word to the existing new line
return new_line
答案 1 :(得分:1)
你的代码没有重置new_word
的值并且你在循环中覆盖了new_line
这是正确的,但是我想分享下一个单行解决方案正则表达式:
import re
def to_weird_case(string):
return re.sub(r'(\S)(\S?)', lambda m: "{0}{1}".format(m.group(1).upper(), m.group(2)), string);
print to_weird_case('what do you mean')
请参阅Python demo
(\S)(\S?)
正则表达式将非空白捕获到组1中,将一个或零个非空白捕获到组2中,然后,在re.sub
内,将组1值替换为大写的对应值
查看(\S)(\S?)
与what do you mean
: