2012-06-08 95 views
1

我目前正在定義一個遞歸函數。它的目標是從最低到最高排序。當它開始時,我希望A等於0,但我希望每次在循環中增加一個值。這可能嗎?這是迄今爲止的功能。如果沒有賦值,那麼如何給變量賦值,但如果賦值,保留該值?

def my_sort(number): 
    if a is None: 
     a=0 
     b=1 
    separated = number.split(',') 
    if separated[a]<= separated[b]: 
     while separated[0]<=separated[1]: 
      a = a+1 
      b = b+1 
      my_sort(number) 
     while separated[0]>separated[1]: 
      my_sort(number) 

    else: 
     new=0 
     separated[a] = new 
     separated[a].replace(separated[a],separated[b]) 
     separated[b].replace(separated[b],new) 


user_input= input("values to sort") 
user_input= my_sort(user_input) 
print user_input 

回答

3

更好的方法是將'a'和'b'作爲參數傳遞給my_sort()。那麼你的初始調用是my_sort(user_input, 0, 1),你的遞歸調用是my_sort(number, a+1, b+1)

如果你不喜歡通過「A」和「b」到my_sort(),然後定義my_sort_helper()使用「A」和「B」作爲參數,並實現my_sort作爲my_short_helper (input, 0, 1)

+1

更好的是,用默認值設置'a'和'b'參數。 'def my_sort(number,a = 0,b = 1):...' –

2

回答您的疑問的將只是:a = a or 0

1

上@ GoZoner的做法大廈,我建議預裂的numbers字符串轉換成列表,並把它傳遞給你的my_sort函數,而不是原來的字符串。這樣,對於遞歸,可以用參數的一部分調用它,如nums[2:]

此外,由於b將始終等於a + 1,因此您不需要它。

最終建議:不要將排序結果分配到user_input。只要你改變它,它應該被稱爲別的東西。