web-dev-qa-db-ja.com

文字列で大文字と小文字を入れ替える

文字列の文字を小文字から大文字に変更したいと思います。

私のコードは以下のとおりです。私のコードで得られる出力はaです。どこが間違っているのか、その理由を教えていただけますか?前もって感謝します

test = "AltERNating"

def to_alternating_case(string):
    words = list(string)
    for Word in words:
        if Word.isupper() == True:
            return Word.lower()
        else:
            return Word.upper()  

print to_alternating_case(test)
5

これには2つの答えがあります。簡単なものと難しいものです。

簡単なもの

Pythonにはそれを行うための組み込み関数があります、私はそれが何であるかを正確に覚えていませんが、

string.swapcase()

難しいもの

独自の関数を定義します。文字列を反復処理すると文字ごとに返され、反復を続行する代わりに最初の文字を返すだけなので、関数の作成方法は間違っています。

def to_alternating_case(string):
    temp = ""
    for character in string:
        if character.isupper() == True:
            temp += character.lower()
        else:
            temp += Word.upper()
    return temp
3
Amit Gold

単語を交互にループした後、最初のアルファベットを返しますが、これは期待したものではありません。文字列をリストに変換するのではなく、直接ループするいくつかの提案があり、式if <variable-name> == Trueif <variable-name>に直接簡略化できます。次のように変更して答えます。

test = "AltERNating"

def to_alternating_case(string):
    result = ''
    for Word in string:
        if Word.isupper():
            result += Word.lower()
        else:
            result += Word.upper()
    return result

print to_alternating_case(test)

またはリスト内包表記を使用する:

def to_alternating_case(string):
    result =[Word.lower() if Word.isupper() else Word.upper() for Word in string]
    return ''.join(result)

またはmap、lambdaを使用:

def to_alternating_case(string):
    result = map(lambda Word:word.lower() if Word.isupper() else Word.upper(), string)
    return ''.join(result)
1
hemraj

これは、関数が最初の文字のみを返すためです。つまり、returnキーワードはforループを壊します。

また、words = list(string)を実行して文字列をリストに変換する必要がないことに注意してください。これは、リストの場合と同じように 文字列を反復処理できる であるためです。

swapcase()の代わりにアルゴリズムソリューションを探している場合は、代わりに次のようにメソッドを変更してください。

test = "AltERNating"

def to_alternating_case(string):
    res = ""
    for Word in string:
        if Word.isupper() == True:
            res = res + Word.lower()
        else:
            res = res + Word.upper()
    return res


print to_alternating_case(test)
1
def myfunc(string):
    i=0
    newstring=''
    for x in string:
        if i%2==0: 
            newstring=newstring+x.lower()
        else:
            newstring=newstring+x.upper()
        i+=1
    return newstring
1
Krishna Kanth

ループは、入力文字列の文字を繰り返し処理します。その後、最初の反復から戻ります。したがって、常に1文字の戻り値を取得します。

test = "AltERNating"

def to_alternating_case(string):
    words = list(string)
    rval = ''
    for c in words:
        if Word.isupper():
            rval += c.lower()
        else:
            rval += c.upper()
    return rval    

print to_alternating_case(test)
1
schwobaseggl

あなたはこのようにそれをするべきです:

test = "AltERNating"

def to_alternating_case(string):
    words = list(string)
    newstring = ""
        if Word.isupper():
            newstring += Word.lower()
        else:
            newstring += Word.upper()  
    return alternative
print to_alternating_case(test)
1
Leo Leontev
string=input("enter string:")
temp=''
ss=list(string)
for item in range(len(ss)):
    if item%2==0:
        temp+=ss[item].lower()
    else:
        temp+=ss[item].upper()
print(temp)
0
contents='abcdefgasdfadfasdf'
temp=''
ss=list(contents)
for item in range(len(ss)):
    if item%2==0:
        temp+=ss[item].lower()
    else:
        temp+=ss[item].upper()

print(temp)

このコードを関数内に追加することもでき、印刷の代わりにリターンキーを使用します

0
Rakesh Sharma