【问题标题】:Capitalizing words in (Python)? [duplicate]在(Python)中大写单词? [复制]
【发布时间】:2016-06-11 07:19:51
【问题描述】:

我试图写一些东西来将句子中的每个单词大写。而且效果很好,如下:

print " ".join((word.capitalize() for word in raw_input().strip().split(" ")))

如果输入是“hello world”,则输出是:

    Hello World

但我尝试用不同的方式写如下:

s = raw_input().strip().split(' ')
for word in s:
    word.capitalize()
print ' '.join(s)

而且它的输出是错误的:

    hello world

那有什么问题,为什么结果不一样?!谢谢。

【问题讨论】:

  • 在您的第二个程序中,您将 s 中的一个单词的副本大写。不是 s 本身的单词。
  • 字符串是不可变的,因此字符串方法不能修改原始字符串,它们总是返回一个新字符串。您的第二个代码 sn-p 没有保存该新字符串。顺便说一句,有一种更简单的方法可以将字符串中的每个单词大写:使用str.title 方法,例如'hello world'.title()

标签: python string python-2.7 capitalization


【解决方案1】:

您的代码中的问题是字符串是不可变的,而您正试图对其进行变异。因此,如果您不使用循环,则必须创建新变量。

s = raw_input().strip().split(' ')
new_s = ''
for word in s:
    new_s += s.capitalize()
print new_s

或者,如果您使用enumerate 迭代列表并更新s,它会起作用:

s = raw_input().strip().split(' ')
for index, word in enumerate(s):
    s[index] = .capitalize()
print ' '.join(s)

但字符串中单词大写的最好方法是使用str.title() - 字符串中单词大写的方法:

s = 'hello word'
print(s.title())

【讨论】:

  • 我试过了。但它会将以数字开头的单词大写(如:3g),我不想这样做。
【解决方案2】:
print ' '.join([i.capitalize() for i in raw_input('Enter text here:').split(' ')])

这会解决你的问题。

【讨论】:

    【解决方案3】:

    字符串是immutable,您正在尝试更新相同的值,这是不可能的。

    创建一个新字符串并以这种方式更新。

    s = raw_input().strip().split(' ')
    st = ''
    for word in s:
        st+= word.replace(word,word.capitalize())
    print ''.join(st)
    

    或者

    print " ".join([i.capitalize() for i in raw_input().strip().split(" ")])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多