2012-06-08 54 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。只要你改变它,它应该被称为别的东西。