Python 3, Правильный вызов функции - PullRequest
0 голосов
/ 26 апреля 2018

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

def gameLoop():
    print('1')
    if ageInt == 2:
        gamePlay = '{}'.format(input("Would you like to play a game?\n"))
    else:
        sys.exit(0)

    time.sleep(1)
    if any([gamePlay == 'yes', gamePlay == 'sure']):
        print('you are playing a game')
    elif gamePlay == 'maybe':
            gamePlay = '{}'.format(input("C'mon, let,'s play...\n"))
            time.sleep(1)
            gameLoop()

Я понимаю, что большая часть этого кода может быть небрежной, ноЯ пытаюсь вызвать gameLoop, поэтому, если они ответят «возможно», он вернется к gameLoop.Почему последняя строка кода не возвращается к первой строке?

Изменить, чтобы включить полный код:

import time
import sys

name = input('What is your name?\n')
print('Hello, %s!' % name)
age = int (input('how old are you?\n'))
print('Your age is: %s' % age, ' and your name is: %s' % name)
ageInt = int (1)

def gameLoop():
    print('gameloopworks')
    if ageInt == 2:
        gamePlay = '{}'.format(input("Would you like to play a game?\n"))
    else:sys.exit(0)

    time.sleep(1)
    if any([gamePlay == 'yes', gamePlay == 'sure']):
        print('you are playing a game')
    elif gamePlay == 'maybe':
            gamePlay = '{}'.format(input("C'mon, let,'s play...\n"))
            time.sleep(1)
            print('elif works')
            gameLoop()

if age < 18:
    print(name, 'sorry you\'re too young')
    ageInt = 1

else:
    print(name, 'you are totally blankable')
    ageInt = 2
    gameLoop()

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Я думаю, ваш код должен быть таким

def gameLoop():
while True:
    if ageInt == 2:
        gamePlay = '{}'.format(input("Would you like to play a game?\n"))
    else:
        sys.exit(0)

    if any([gamePlay == 'yes', gamePlay == 'sure']):
        print('you are playing a game')
    elif gamePlay == 'maybe':
        gamePlay = '{}'.format(input("C'mon, let,'s play...\n"))
if __name__ == '__main__':
    gameLoop()
0 голосов
/ 26 апреля 2018
Your code works. A recursive call gameLoop() is in progress. Or I 
  didn't understand the question.
  What is your name?
  Vladmir
  Hello, Vladmir!
  how old are you?
  45
  Your age is: 45  and your name is: Vladmir
  Vladmir you are totally blankable
  gameloopworks
  Would you like to play a game?
  maybe
  C'mon, let,'s play...
  OK
  elif works
  gameloopworks
  Would you like to play a game?
  maybe
  C'mon, let,'s play...
  OK
  elif works
  gameloopworks
  Would you like to play a game?
  maybe
  C'mon, let,'s play...
  ys
  elif works
  gameloopworks
  Would you like to play a game?
  yes
  you are playing a game
  Process finished with exit code 0
0 голосов
/ 26 апреля 2018

Вы делаете рекурсию вместо цикла;вы в основном вызываете одну и ту же функцию каждый раз, но значения каждого вызова не будут сохраняться в следующем из-за переменной области видимости (немного более продвинутой, чем вы хотите сейчас, но на всякий случай).

Попробуйте использовать while цикл, и он будет работать намного лучше для ваших целей.

keep_playing = True
while keep_playing:
    if <condition to stop>:
        keep_playing = False
    else:
        # keep game
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...