Здесь есть много возможных подходов. Тот, который больше всего напоминал бы ваш текущий подход, - это передача функции. У вас есть функция, например:
paper()
Функции могут иметь аргументы. Эти аргументы будут go в круглых скобках, и они станут переменными внутри этой функции. Например, у вас может быть одна функция play () и передать ей «камень», «бумага» или «ножницы» следующим образом:
def play(user_choice):
if user_choice == 'paper':
paper()
if user_choice == 'rock':
rock()
....
Затем эту функцию можно вызвать как это:
>>> play('paper')
В этом примере я передаю строку 'paper' функции play (). Однако я также могу передать функцию play () функции, например:
def play(func):
func()
С помощью этого метода я могу отправить функцию «камень», «бумага» или «ножницы» в функцию play, а затем вызовите переданную мной функцию. Вы можете - хотя это, вероятно, не лучший подход - передать функцию другой функции внутри себя:
def repeat(func):
func()
def play():
# do your things
repeat(play)
Но ... этот подход является избыточным. Нет смысла создавать функцию только для вызова функции, когда вместо этого вы можете просто вызвать функцию:
def play():
# do your things
play()
Это рекурсивная функция. В конце функции он снова вызывает себя. Это будет go навсегда, если вы его не остановите, поэтому рекурсия обычно записывается условно:
def play():
# do your things
continue = input("Would you like to continue [y/n]? ")
if continue == 'y':
play()
else:
pass
# This else statement is implicit. If you don't add it, it'll do it anyway.
Другой вариант - al oop, например, 'while l oop' :
def play():
keep_going = True
while keep_going:
#do your things
continue = input("Would you like to continue [y/n]? ")
if continue == "y":
keep_going = True
else:
keep_going = False
A while l oop похож на рекурсивный оператор if. Когда код переходит к оператору while, он определяет, является ли оператор истинным или ложным, выполняя код только в том случае, если он истинен. Однако в отличие от оператора if, когда он завершит выполнение кода, он go вернется и повторно вычислит оператор, и, если он все еще верен, запустит его снова. Время l oop закончится только в том случае, если вы измените переменные, которые он оценивает, так что в конечном итоге оператор будет иметь значение false, после чего программа продолжится.