2017-02-07 1 views
0

У меня есть следующая проблема. Моя функция в Python выглядит следующим образом:Возвращаемое значение из функции, когда сама функция вызвана внутри PYTHON

def choose_sepa_reason_code(): 
# This method is for providing proper sepa reason code 

sepa_reason_code = input("\nPlease provide SEPA reason code to reject the payment: ") 

if sepa_reason_code in sepa_reason_codes: 
    return sepa_reason_code 
else: 
    print("Your reason codes doesnt match the list:\n") 
    pprint(sepa_reason_codes) 
    choose_sepa_reason_code() 

provided_sepa_reason_code = choose_sepa_reason_code()

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

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

+2

первый вы ничего не возвращаете из своей ветви 'else', во-вторых, вы не должны вызывать вашу функцию рекурсивно. Реорганизация подпрограммы с циклом решила бы это. –

+1

См. [Запрос пользователя для ввода до тех пор, пока он не даст действительный ответ] (http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response) – roganjosh

+0

использовать цикл while – Yousaf

ответ

1

Если вы действительно хотите, чтобы вызвать функцию рекурсивно, вызовите choose_sepa_reason_code() в качестве возвращаемого значения в вашем еще заявление:

sepa_reason_code = input("\nPlease provide SEPA reason code to reject the payment: ") 

if sepa_reason_code in sepa_reason_codes: 
    return sepa_reason_code 
else: 
    print("Your reason codes doesnt match the list:\n") 
    print(sepa_reason_codes) 
    return choose_sepa_reason_code() 
+0

Спасибо, что он отлично работает сейчас. – kapalkat

+0

не был в этом весь смысл, ссылаясь на функцию, потому что он хотел, чтобы она выполнялась до тех пор, пока пользователь не войдет правильно? – WhatsThePoint

+0

@WhatsThePoint, что и есть. – roganjosh

2

Во-первых, ваш код не запускается, потому что он не имеет отступов, во-вторых, вы не можете вызвать функцию внутри себя.

это будет лучший подход к вашей задаче:

def choose_sepa_reason_code(): 
# This method is for providing proper sepa reason code 
    while True: #will provide permanent loop 
     sepa_reason_code = input("\nPlease provide SEPA reason code to reject the payment: ") 

     if sepa_reason_code in sepa_reason_codes: 
      return sepa_reason_code #stops loop and returns the reason code 
     else: 
      print("Your reason codes doesnt match the list:\n") 
      print(sepa_reason_codes) 
+1

спасибо, добавил 'while' цикл и забыл отступы его код :) – WhatsThePoint

+0

также сторона примечания к OP ваши имена переменных, функция и т. Д. Слишком похожи только с незначительными отличиями, затрудняет чтение, я бы рекомендовал их изменить – WhatsThePoint

+0

Нет проблем. Тем не менее. Вы пишете «во-вторых, вы не можете вызвать функцию внутри себя». Но это не так. См. Эту ссылку о [рекурсии] (http://www.python-course.eu/recursive_functions.php) – roganjosh