Неизвестная причина выполнения кода так же, как в Python - PullRequest
3 голосов
/ 11 апреля 2010

Я начинающий программист, использующий Python на Mac.

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

Код:

import time

def newGameStep2():
        print '  ******************************************  '
        print '\nStep2\t\t\t\tCharacter Name'
        print '\nChoose a name for your character. This cannot\n be changed during the game. Note that there\n are limitations upon the name.'
        print '\nLimitations:\n\tYou cannot use:\n\tCommander\n\tLieutenant\n\tMajor\n\t\tas these are reserved.\n All unusual capitalisations will be removed.\n There is a two-word-limit on names.'
        newStep2Choice = raw_input('>>>')
        newStep2Choice = newStep2Choice.lower()
        if 'commander' in newStep2Choice or 'lieutenant' in newStep2Choice or 'major' in newStep2Choice:
            print 'You cannot use the terms \'commander\', \'lieutenant\' or \'major\' in the name. They are reserved.\n'
            print
            time.sleep(2)
            newGameStep2()
        else:
            newStep2Choice = newStep2Choice.split(' ')
            newStep2Choice = [newStep2Choice[0].capitalize(), newStep2Choice[1].capitalize()]
            newStep2Choice = ' ' .join(newStep2Choice)
        return newStep2Choice

myVar = newGameStep2()
print myVar

Когда я тестировал, я вводил 'major a', и когда меня просили ввести другое имя, я вводил 'a b'. Однако, когда он возвращает выходные данные функции, он возвращает 'major a'. Я прошел через отладчик, но до сих пор не могу понять, где возникла проблема.

Спасибо за любую помощь, Jasper

1 Ответ

8 голосов
/ 11 апреля 2010

Ваш рекурсивный вызов newGameStep2() не возвращается, поэтому, когда второй вызов завершается, поток управления продолжается в первом вызове после блока if / else, и return newStep2Choice возвращает первое значение чтения. Вам нужно изменить рекурсивный вызов на:

return newGameStep2()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...