(python) функции с переменными аргументами - PullRequest
0 голосов
/ 10 ноября 2019

Как заставить следующий код работать так, чтобы функции выполнялись на счетах игроков отдельно и позволяли им накапливаться? (Кстати, я очень плохо знаком с python, поэтому не судите)

player_1_score=0
player_2_score=0
def six(score):
    print('you rolled a 6')
    print('''
 -------
| o   o |
| o   o |
| o   o |
 -------   ''')
    score+=6

def five(score):
     print('you rolled a 5')
     print('''
 -------
| o   o |
|   o   |
| o   o |
 -------    ''')
     score+=5

#for player1
five(player_1_score)
six(player_1_score)
print('p1 score:',int(player_1_score))

#for player2
five(player_2_score)
six(player_2_score)
print('p2 score:',int(player_1_score))

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

Ответы [ 3 ]

2 голосов
/ 10 ноября 2019

Вам необходимо вернуть новый счет по каждой функции:

def six(score):
    print('you rolled a 6')
    print('''
 -------
| o   o |
| o   o |
| o   o |
 -------   ''')
    score += 6
    return score

Но сайты вызовов должны быть такими:

player_1_score = five(player_1_score)

Обязательная ссылка на имена Недом Батчелдером.

1 голос
/ 10 ноября 2019

Вы можете обновлять оценки отдельно, т.е. не в функциях «бросать кубики». Я думаю, что это более читабельно на этом этапе. Позже, когда вы продвинетесь в изучении Python, вы, вероятно, решите проблему по-другому, возможно, с помощью класса Player и сопоставления (от 1 до 6) -> (грань кубика в виде строки).

def six():
    print('you rolled a 6')
    print('''\
 -------
| o   o |
| o   o |
| o   o |
 -------   ''')
    return 6

def five():
    print('you rolled a 5')
    print('''\
 -------
| o   o |
|   o   |
| o   o |
 -------    ''')
    return 5

player_1_score = 0
player_2_score = 0

#for player1
player_1_score += five()
player_1_score += six()

#for player2
player_2_score += five() + six()

print('scores:', player_1_score, player_2_score)

Примечание. Я добавил обратную косую черту в оператор print('''\), чтобы избавиться от пустой строки. Мне это нравится больше, но вы можете предпочесть пустую строку.

0 голосов
/ 10 ноября 2019

Вы хотите изменить счет игрока, но не меняете его. Вы отправляете счет игрока, но если вы меняете счет в своих функциях (six и five), вы не изменяете исходный счет. Если вы хотите изменить исходный счет, вы можете вернуть score из ваших функций и присвоить его баллам вашего игрока. Например:

def five(score):
     print('you rolled a 5')
     print('''
 -------
| o   o |
|   o   |
| o   o |
 -------    ''')
     score+=5
     return score

#for player1
player_1_score=five(player_1_score)
print('p1 score:',int(player_1_score))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...