单个单词输入成功交换,但不适用于问题怪异案例codewarrior中的句子?
single word input succesfully ase swaped,but not worked for the sentences in problem weird case codewarrior?
目前我正在cordwarrior 中解决奇怪的案例问题。问题是写一个函数 toWeirdCase (weirdcase in Ruby) 接受一个字符串,returns 相同的字符串,每个单词中的所有偶数索引字符都大写,每个单词中的所有奇数索引字符小写。刚刚解释的索引是从零开始的,所以第零索引是偶数,因此该字符应该是大写的。
我写的 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'\
link到问题: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'))
但它使所有单词大写。
你们真的很亲密。当有 space.
时,你只需要做一些特别的事情
因为你的第一个函数对单个单词很有效,所以我保留它来做真正的。
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'].
现在我们需要加入该列表,在每个单词之间放置 space 个字符。
这是通过 ' '.join(list) 完成的。所以我们现在有了最终输出:
'ThIs Is A TeSt'
还有其他方法可以做到,但我想使用您已经完成的方法。
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 string
Flag 在 True 和 False 之间切换,如果出现 space,则 Flag 设置为 True,表示新单词开始,另外,如果遇到 space 字符,则仅在以下部分循环被执行
if ch == " ":
string += ch
Flag = True
continue
因为它有 continue
语句
目前我正在cordwarrior 中解决奇怪的案例问题。问题是写一个函数 toWeirdCase (weirdcase in Ruby) 接受一个字符串,returns 相同的字符串,每个单词中的所有偶数索引字符都大写,每个单词中的所有奇数索引字符小写。刚刚解释的索引是从零开始的,所以第零索引是偶数,因此该字符应该是大写的。
我写的 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'\
link到问题: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'))
但它使所有单词大写。
你们真的很亲密。当有 space.
时,你只需要做一些特别的事情因为你的第一个函数对单个单词很有效,所以我保留它来做真正的。
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'].
现在我们需要加入该列表,在每个单词之间放置 space 个字符。 这是通过 ' '.join(list) 完成的。所以我们现在有了最终输出:
'ThIs Is A TeSt'
还有其他方法可以做到,但我想使用您已经完成的方法。
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 string
Flag 在 True 和 False 之间切换,如果出现 space,则 Flag 设置为 True,表示新单词开始,另外,如果遇到 space 字符,则仅在以下部分循环被执行
if ch == " ":
string += ch
Flag = True
continue
因为它有 continue
语句