2011-07-11 42 views
0

如果我把「Ab3」作爲參數,我會如何將「Ab4」的值返回給我?如何從Python的函數中獲得新的價值?

這個函數的目標是獲取一個字符串的第三個字符並添加一個,除非它是四,在這種情況下它不會添加一個並退出。我不知道如何獲得函數從「Ab3」創建的「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)',只需將第四行改爲'return area [: - 1] + str(int(area [-1])+ 1)''。 –

+0

@Chris - 是的 - 你是對的,謝謝。我發佈了修改後的代碼。 –

+0

哦,你可以在'123'中使用'area [-1] - 它更短更高效。 (至少,用一個元組而不是一個列表,但str比較好) –

0

你在那裏會發生什麼,你只需要返回值。將最後一行更改爲return ''.join(area_list)

+0

這並不是說這是「最好的」方法。有很多方法可以做到這一點; @ Artsiom是可以工作的。 –

1

Python中的字符串是不可變的(http://docs.python.org/library/stdtypes.html),所以你不能真正更新「區域」對象(儘管你可以重新分配區域你已經證明了一個新的價值)。如果你想讓調用者獲得新的值,你應該返回新的區域變量(返回區域)。