首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单字输入成功,因为交换,但不工作的句子问题奇怪的大小写codewarrior?

单字输入成功,因为交换,但不工作的句子问题奇怪的大小写codewarrior?
EN

Stack Overflow用户
提问于 2019-11-28 22:28:17
回答 2查看 48关注 0票数 0

目前,我正在做cordwarrior中的奇怪的案例问题。问题是,编写一个接受字符串的函数toWeirdCase (Ruby中的weirdcase),并返回相同的字符串,每个单词中的所有偶数索引字符都大写,每个单词中的所有奇数索引字符都小写。刚才解释的索引是从零开始的,所以第零个索引是偶数,因此该字符应该大小写。

我写的function.It成功地交换了单个单词的大小写,但不适用于多个单词或一个句子,所以我考虑应用swapcase,但它交换了不是desirable.So的句子中的所有单词。我不知道哪个条件可能适合这个::

代码语言:javascript
复制
   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   

获取此类型时出错:

代码语言:javascript
复制
 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

我想到了另一种方法,即划分句子并对每个单词应用函数。

代码语言:javascript
复制
   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'))

但它会让所有的单词都大写。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-28 22:53:39

你们真的很亲近。当有空间的时候,你只需要去做一些特别的事情。

由于您的第一个函数对单个单词运行良好,因此我将其保留为真正的函数。

代码语言:javascript
复制
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’

还有其他方法可以做到这一点,但我想使用您已经做过的事情。

票数 1
EN

Stack Overflow用户

发布于 2019-11-28 23:37:07

代码语言:javascript
复制
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之间切换,如果出现空格,则将Flag设置为True,表示新词正在开始;如果遇到空格字符,则只执行循环的下一部分

代码语言:javascript
复制
 if ch == " ":
            string += ch
            Flag = True
            continue

因为它有continue语句

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59091076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档