2016-12-24 4 views
-1

У меня есть этот кусок кода:Функция возврата к глобальному

def bricks(small,big,goal): 

    current_lenght = 0 
    current_value = 5 
    number_of_bricks = big 
    builder(current_lenght,current_value,number_of_bricks,goal) 
    current_value = 1 
    print("in bricks", current_lenght) 
    number_of_bricks = small 
    builder(current_lenght,current_value,number_of_bricks,goal) 
    if current_lenght == goal: 
     return True 
    else: 
     return False 

def builder(current_lenght,current_value,number_of_bricks,goal): 

    use_count = 1 
    while (goal - current_lenght) >+ current_value and use_count <= number_of_bricks: 
     current_lenght += current_value 
     print("in while ",current_lenght) 
    print(current_lenght) 
    return current_lenght 

и не использует actuall текущую длину от первого использования строителя, но он снова начинается с 0. Почему это так?

+0

Просто, кстати, но '> + current_value' означает "больше, чем 'current_value' со своим знаком неизменным", когда вы, вероятно, означает '> = current_value'. И это «длина», а не «длина». Возможно, вы захотите сначала просмотреть свой код для опечаток. – TigerhawkT3

+0

Не рекомендуется внутри функций, но если вы хотите получить доступ к глобальной переменной, определите ее в верхней части функции как «global current_length», а затем функция будет искать глобальную переменную и использовать ее вместо – Ronikos

+0

'length' или' lenght '? –

ответ

0

current_length не меняется за пределами builder функция. Но вернуть новое значение, так просто это сделать:

current_length = builder(current_lenght,current_value,number_of_bricks,goal) 

первый раз, когда вы звоните builder

0

Ключевая проблема заключается в том, что вы не переназначение current_lenght (SIC) к значению, возвращаемый вашей функцией builder в корпус bricks.

Я исправил это и немного усовершенствовал свой стиль кода, чтобы сделать код более читаемым. Я OCD таким образом, но хороший стиль кода и комментарий могут действительно помочь с ловить и исправлять ошибки тоже.

Надеюсь, это поможет!

def bricks(small, big, goal): 
    # Passing the following values: 
    # current_length = 0 
    # current_value = 5 
    # number_of_bricks = big 

    current_length = builder(0, 5, big, goal) 

    print("in bricks", current_length) 

    # Passing the following values: 
    # current_length as calculated above 
    # current_value = 1 
    # number_of_bricks = small 

    builder(current_length, 1, small, goal) 

    if current_length == goal: 
     return True 
    else: 
     return False 

def builder(current_length, current_value, number_of_bricks, goal): 

    use_count = 1 

    while (goal - current_length) >+ current_value and use_count <= number_of_bricks: 
     current_length += current_value 
     print("in while", current_length) 
    print(current_length) 

    return current_length 

if __name__ == '__main__': 
    # Let's test what we've written 
    bricks(1, 10, 100) 
Смежные вопросы