问题
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