我有以下代码:
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
然而,当我运行它时,假设输入值为p
,fragment
打印为'ppp' - 全部小写,即fragment.upper()
行不运行。如果我用string.upper(fragment)
替换该行(并在开头添加导入字符串),也会发生同样的情况。有人能告诉我我做错了吗?
答案 0 :(得分:14)
字符串为immutable。因此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()
,然后使用new_variable
。
答案 1 :(得分:7)
你没有意识到Python中的字符串是不可变的,字符串方法和操作会返回新的字符串。
>>> print 'ppp'.upper()
PPP
答案 2 :(得分:3)
String是一个不可变对象,所以当你调用
时string.upper()
python会复制字符串,当你回来时调用
print string
,它将是原始字符串,它是小写字母。因此,当您需要大写版本时,您必须说:
print string.upper()