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

しかし、たとえば の入力値に対して実行すると、「ppp」として出力されます。すべて小文字です。つまり、p行は実行されません。その行を(そして最初にインポート文字列を追加して)置き換えると、同じことが起こります。誰かが私が間違っていることを教えてもらえますか?fragmentfragment.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()new_variable

于 2012-02-27T07:04:45.490 に答える
7

Python の文字列は不変であり、文字列のメソッドと操作が新しい文字列を返すことに気付いていません。

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

文字列は不変オブジェクトなので、呼び出すと

string.upper()

python は文字列のコピーを作成し、戻ってきたら呼び出します

print string

、それは小文字の元の文字列になります。したがって、大文字バージョンが必要な場合は、次のように言う必要があります。

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