2

所以问题是:

编写一个程序,接受一个句子作为输入,其中所有单词都一起运行,但每个单词的第一个字符都是大写的。将句子转换为字符串,其中单词由空格分隔,并且只有第一个单词以大写字母开头。例如字符串“StopAndSmellTheRoses”。将被转换为“停下来闻闻玫瑰”。

到目前为止,我对我的代码感到非常困惑。

def main():

    #User enters a sentence
    my_string=input('enter a sentence: ')
    print(my_string.capitalize())

main()
4

4 回答 4

2

您可以遍历字符串并每次在结果中添加一个字符:

my_string = "StopAndSmellTheRoses"
i = 0
result = ""
for c in my_string:
    if c.isupper() and i > 0:
        result += " "
        result += c.lower()
    else:
        result += c
    i += 1

print result

我们将c在遍历字符串时使用每个字符,并且我们将使用它i来跟踪字符串中的位置。

有两种可能性:要么是大写字符(不包括第一个字符),要么不是。

  • 在第一种情况下,我们将在结果中添加一个空格和该字符作为小写字母。这确保在句子中每个大写字符之前插入一个空格。
  • 在第二种情况下,它是句子开头的小写字符或大写字符。我们不需要对这些做任何事情,我们会立即添加它。

最后,i每当我们完成一个字符 ( i += 1) 时,我们都会添加一个,因为这意味着我们正确地知道我们在句子中的位置。

于 2013-10-25T23:48:39.857 回答
1

欢迎来到 SO!

一种方法是遍历你的字符串,一一检查字符:

#You've learned how to iterate through something, right?
i = 0 #a counter
for c in my_string: #get the characters of my_string, one by one.
    if c.isupper():        #check if it's in upper case
        if i == 0: #if it's the first letter
            new_string += c   #let it be like the original
        else:
            new_string += ' '+.lower() #it's not the first letter, 
            #so add space, and lower the letter.
else:
    new_string += c    #else, only add the letter to the new string
i += 1

编辑添加了一个仔细检查,看看它是否是句子的第一个字母。更新了演示。

作为使用计数器的替代方法,您还可以使用内置函数enumerate,它返回索引和值的元组。

for i,c in enumerate(my_string): #get the characters of my_string, one by one.
    if c.isupper():        #check if it's in upper case
        if i == 0: #if it's the first letter
            new_string += c   #let it be like the original
        else:
            new_string += ' '+c.lower() #it's not the first letter, 
            #so add space, and lower the letter.
else:
    new_string += c    #else, only add the letter to the new string

演示

>>> my_string = 'ImCool'
>>> new_string = ''
>>> i = 0 #a counter
>>> for c in my_string: #get the characters of my_string, one by one.
    if c.isupper():        #check if it's in upper case
        if i == 0: #if it's the first letter
            new_string += c   #let it be like the original
        else:
            new_string += ' '+.lower() #it's not the first letter, 
            #so add space, and lower the letter.
else:
    new_string += c    #else, only add the letter to the new string
    i += 1


>>> new_string
'Im cool'

希望这可以帮助!

于 2013-10-25T23:45:12.320 回答
0

你需要一点正则表达式。

import re
split = re.findall(r'[A-Z][a-z\.]+', 'HelloThisIsMyString.')

您还需要将它们连接在一起(插入空格)

' '.join(...)

并处理大小写转换

' '.join(word.lower() for word in split)

(就像你已经做过的那样,将第一个单词大写)

' '.join(word.lower() for word in split).capitalize()
于 2013-10-25T23:44:51.990 回答
0

看来您有点困惑,如果您是 Python 新手,这是可以预料的。我假设您接受用户的输入,而不是函数的输入。无论哪种方式,我都会创建一个简单的函数,您可以将用户输入插入其中。下面的函数将完成问题的要求。

def sentenceSplitter(sentence):
result = ""
for i, x in enumerate(sentence):  #i is character index, x is the element
    if i == 0:
        result = result + x
    elif x.isupper() == False:  #if element is not uppercase, add it to the result
        result = result + x
    else:                       # Otherwise, add a space and lowercase the next letter
        result = result + " " +x.lower()
return(result)

重申一下,如果您要打印出句子,您可以在函数之后写下:

def main():

#User enters a sentence
my_string=input('enter a sentence: ')
print(sentenceSplitter(my_string))
main()

如果您仍然感到困惑,请随时提出任何进一步的问题。

于 2013-10-26T01:23:49.023 回答