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?
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
.
You're not realizing that strings in Python are immutable and that string methods and operations return new strings.
>>> print 'ppp'.upper()
PPP
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