目前,我正在做cordwarrior中的奇怪的案例问题。问题是,编写一个接受字符串的函数toWeirdCase (Ruby中的weirdcase),并返回相同的字符串,每个单词中的所有偶数索引字符都大写,每个单词中的所有奇数索引字符都小写。刚才解释的索引是从零开始的,所以第零个索引是偶数,因此该字符应该大小写。
我写的function.It成功地交换了单个单词的大小写,但不适用于多个单词或一个句子,所以我考虑应用swapcase,但它交换了不是desirable.So的句子中的所有单词。我不知道哪个条件可能适合这个::
def to_weird_case(string):
tot=""
for i in range(len(string)):
if i%2==0:
tot+=string[i].upper()
if i%2==1:
tot+=string[i].lower()
if string[i]==" " or i%2==1:
to_weird_case(string[i:])
return tot 获取此类型时出错:
toWeirdCase
should return the correct value for a single word (8 of 8 Assertions)
should return the correct value for multiple words
'ThIs iS A TeSt' should equal 'ThIs Is A TeSt'
'LoOkS LiKe yOu pAsSeD' should equal 'LoOkS LiKe YoU PaSsEd'
'ThIs iS ThE FiNaL TeSt cAsE' should equal 'ThIs Is ThE FiNaL TeSt CaSe'
'JuSt kIdDiNg' should equal 'JuSt KiDdInG'
'Ok fInE YoU ArE DoNe nOw' should equal 'Ok FiNe YoU ArE DoNe NoW'\指向问题的链接:https://www.codewars.com/kata/52b757663a95b11b3d00062d/train/python
我想到了另一种方法,即划分句子并对每个单词应用函数。
def swap(string):
tot=""
for i in range(len(string)):
if i%2==0:
tot+=string[i].upper()
if i%2==1:
tot+=string[i].lower()
if i%2==0:
swap(string[i])
return tot
def to_weird_case(string):
new=""
for j in string:
print(swap(j))
print(to_weird_case('ThIs iS A TeSt'))但它会让所有的单词都大写。
发布于 2019-11-28 22:53:39
你们真的很亲近。当有空间的时候,你只需要去做一些特别的事情。
由于您的第一个函数对单个单词运行良好,因此我将其保留为真正的函数。
def to_weird_case(string): # actually your function
tot=""
for i in range(len(string)):
if i%2==0:
tot+=string[i].upper()
if i%2==1:
tot+=string[i].lower()
if string[i]==" " or i%2==1:
to_weird_case(string[i:])
return tot
def to_weird_case_words(string): # my contribution, so that It work with strings with spaces
return ' '.join([to_weird_case(s) for s in string.split(' ')])
print(to_weird_case('this is a test'))
print(to_weird_case_words('this is a test'))这里是对我所做的事情的解释:首先,有一个string.split(‘'),它用一个单词组成一个列表。使用'this is a test‘时,输出为
‘'this','is','a','test’。
然后我使用列表理解对它进行循环,并对每个单词应用您的函数。所以现在我们有了这个列表:
‘'ThIs','Is','A','TeSt’。
现在我们需要加入该列表,在每个单词之间放置空格字符。这是通过‘'.join(list)完成的。现在我们有了最终的输出:
‘'ThIs Is a TeSt’
还有其他方法可以做到这一点,但我想使用您已经做过的事情。
发布于 2019-11-28 23:37:07
def to_weird_case(inp_str):
#TODO
string = ""
Flag = True
for ch in inp_str:
if ch == " ":
string += ch
Flag = True
continue
if Flag:
string += ch.upper()
else:
string += ch.lower()
Flag = not Flag
return stringFlag在True和False之间切换,如果出现空格,则将Flag设置为True,表示新词正在开始;如果遇到空格字符,则只执行循环的下一部分
if ch == " ":
string += ch
Flag = True
continue因为它有continue语句
https://stackoverflow.com/questions/59091076
复制相似问题