2011-07-11 10 views
0

「Ab3」をパラメータに入れた場合、「Ab4」の値が返されるのはどうですか?Pythonの関数から新しい価値を得るには?

この関数の目的は、文字列の3番目の文字を取り出し、それが4でない場合は1を追加することです。その場合は、文字列を追加せずに終了します。私は関数が "Ab3"から作成し、それを "area"変数に戻す "Ab4"を得る方法を知らない。

def east(area): 

    area_list = list(area) 

    if "1" == area_list[2]: 
     area_list[2] = "2" 

    elif "2" == area_list[2]: 
     area_list[2] = "3" 

    elif "3" == area_list[2]: 
     area_list[2] = "4" 

    elif "4" == area_list[2]: 
     cannot_go(why) 

    else: 
     exit(0) 

    area = "".join(area_list) 

答えて

5

あなたの関数内のreturnステートメントが欠けているだけで、不変の文字列入力を使用しているので必要です。あなたが実際には「地域」オブジェクトを更新することはできませんので、あなたがエリアを再割り当てすることができますが(、

def east(area): 
    if area[-1] in '123': 
     return area[:-1] + str(int(area[-1])+1) 
    elif "4" == area[-1]: 
     print 'no way' 
     return area 
    else: 
     return 'incorrect input'# or throw and exception depends on what you really need 

+2

'area = list(area)'を使わず、4行目を 'return area [: - 1] + str(int(area [-1])+ 1)'に変更する方がよいでしょう。 –

+0

@Chris - はい - そうです、ありがとうございます。私は変更されたコードを投稿しました。 –

+0

ああ、123で 'area [-1]を使うことができます - それはより短く効率的です。 (少なくとも、リストの代わりにタプルを使用してください。) –

0

何があっても、値を返す必要があります。最後の行をreturn ''.join(area_list)に変更します。

+0

これは「最良の」アプローチであるとは言えません。あなたがそれを行うことができる方法はいくつかあります。 @ Artsiom'sはうまくいくものです。 –

1

Pythonの文字列は(http://docs.python.org/library/stdtypes.html)不変であるクリス・コメントにつきとして編集:あなたは、次のコードを使用することができますあなたが実証した新しい価値)。呼び出し側が新しい値を取得するようにするには、新しい領域変数(戻り領域)を返す必要があります。

関連する問題