string.upper(<str>) and <str>.upper() won't execute

只谈情不闲聊 提交于 2019-12-17 20:42:07

问题


I have the following bit of code:

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

However when I run it, say for an input value of p, fragment gets printed as 'ppp' - all lower case, i.e. the fragment.upper() line does not run. The same thing happens if I replace that line with string.upper(fragment) (and adding import string at the beginning). Can someone tell me what I'm doing wrong?


回答1:


Strings are immutable. So functions like str.upper() will not modify str but return a new string.

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

So instead of fragment.upper() in your code, you need to do new_variable = fragment.upper()and then use this new_variable.




回答2:


You're not realizing that strings in Python are immutable and that string methods and operations return new strings.

>>> print 'ppp'.upper()
PPP



回答3:


String is a immutable object, so when you call

string.upper()

python would make a copy of the string, and when you come back call

print string

, it would be the original string, which is lower case. So when you need its upper case version, you have to say:

print string.upper()


来源:https://stackoverflow.com/questions/9461071/string-upperstr-and-str-upper-wont-execute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!