2014-07-18 2 views
0

Я практикую с «Думай Python», Упражнение 8.1, что:Python: Передача функции аргументов для строк

«Написать функцию, которая принимает строку в качестве аргумента и отображает буквы в обратном направлении, по одному в каждой строке.»

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

index = 0 
fruit = "banana" 
while index < len(fruit): 
    letter = fruit[len(fruit)-index-1] 
    print letter 
    index = index + 1 

Однако, я хотел бы обобщить ситуацию любых входных слов, и я получил эту проблему, мой код

index = 0 
def apple(fruit): 
    while index < len(fruit): 
     letter = fruit[len(fruit)-index-1] 
     print letter 
     index = index + 1 

apple('banana') 

Соответствующие ошибки:

Traceback (most recent call last): 
    File "exercise8.1_mod.py", line 21, in <module> 
    apple('banana') 
    File "exercise8.1_mod.py", line 16, in apple 
    while index < len(fruit): 
UnboundLocalError: local variable 'index' referenced before assignment 

Я думаю, должны быть проблемы, связанные с используемыми аргументами функции. Любая помощь будет оценена.

+5

Просто введите свой 'index = 0' внутри вашей функции (в начале ее). – BrenBarn

+0

@BrenBarn, если вы объясните ему, ему нужно держать внутри, чтобы он мог узнать о локальных и глобальных переменных правильно? :) –

ответ

0

ваша программа получила ошибку из-за вашего доступа к глобальной переменной в методе и пытается изменить его значение

index = 0 
def apple(fruit): 
    ..... 
    index = index + 1 
    ....  
apple('banana') 

это даст вам ошибки UnboundLocalError: local variable 'index' referenced before assignment

но если вы даете

def apple(fruit): 
     global index 
     ..... 
     index = index + 1 
     .... 

это дает правильный результат

в питоне есть Global variable и Local variables

перейдите Повсеместно this

В Python, переменные, которые только ссылочные внутри функции, неявно глобальный характер. Если переменной присваивается новое значение в любом месте внутри тела функции, предполагается, что оно является локальным. Если переменной присваивается новое значение внутри функции, переменная неявно локальна, и вам необходимо явно объявить ее глобальной.

+0

Большое спасибо за подробное объяснение локальных и глобальных переменных. Это очень помогает! – nam

+0

@nam ваш welcome.glad помог вам :) –

1

Это, вероятно, лучше работать:

def apple(fruit): 
    for letter in fruit[::-1]: 
     print letter 

apple('banana') 

Это работает путем индексации строки в обратном порядке, встроенная функция питона, известной как нарезка.

Reverse a string in Python

+0

thx beiller, я узнаю из вашего заявления, фрукты [:: - 1], это аккуратно и звучит довольно для меня ~! – nam

0

Вам необходимо присвоить значение index, прежде чем использовать его.

def apple(fruit): 
    index = 0 # assign value to index 
    while index < len(fruit): 
     letter = fruit[len(fruit)-index-1] 
     print letter 
     index = index + 1 
apple("peach") 
h 
c 
a 
e 
p 
+0

Большое спасибо за ваш комментарий * присвойте значение индексу *. Моя программа запускается.Thx =] – nam

Смежные вопросы