2

我有以下代码:

def test():
    fragment = ''
    fragment = raw_input('Enter input')
    while fragment not in string.ascii_letters:
        fragment = raw_input('Invalid character entered, try again: ')
    fragment.upper()
    print fragment*3

但是,当我运行它时,比如输入值pfragment会打印为 'ppp' - 全部小写,即该fragment.upper()行不运行。如果我用(并在开头string.upper(fragment)添加导入字符串)替换该行,也会发生同样的事情。有人可以告诉我我做错了什么吗?

4

3 回答 3

16

字符串是不可变的。所以像这样的函数str.upper()不会修改str而是返回一个新的字符串。

>>> name = "xyz"
>>> name.upper()
'XYZ'
>>> print name
xyz  # Notice that it's still in lower case.
>>> name_upper = name.upper()
>>> print name_upper
XYZ

fragment.upper()因此,您需要执行new_variable = fragment.upper()然后使用 this而不是在您的代码中new_variable

于 2012-02-27T07:04:45.490 回答
7

您没有意识到 Python 中的字符串是不可变的,并且字符串方法和操作会返回新字符串。

>>> print 'ppp'.upper()
PPP
于 2012-02-27T06:48:44.387 回答
3

String 是一个不可变的对象,所以当你调用

string.upper()

python 会复制字符串,当你回来时调用

print string

,它将是原始字符串,它是小写的。所以当你需要它的大写版本时,你不得不说:

print string.upper()
于 2012-02-27T08:17:28.970 回答