首页 > 解决方案 > 我写了一个简单的石头剪刀布程序,但我想在三个中做到最好,不知道如何将它写到我现有的代码中

问题描述

就像标题所暗示的那样,我是新手,正在努力磨练自己的技能,但我不知道该怎么做……任何帮助将不胜感激。

import random

playerOneWin = ((1,3), (3,2), (2,1))
playerTwoWin = ((3,1), (2,3), (1,2))
tie = ((1,1), (2,2), (3,3))



while True:
    roll = random.randint(1,3), random.randint(1,3)
    if roll in tie:
        print('Tie')
        break
    elif roll in playerOneWin:
       print('Player 1 Wins')
       break
    elif roll in playerTwoWin:
       print('Player 2 Wins')
       break

就像我做一个功能?我是否将其写入我的 while 循环?

如果我这样做了怎么办?我该怎么做呢?

标签: pythonpython-3.x

解决方案


解决问题的一般建议:

  • 想一想一般的解决方案是什么,并细化为一种算法,而不是列出所有可能的结果。

要实现“三局两胜”,即在 2 次处决后以 2-0 停止,请检查任一玩家的得分为 2 并在那里结束。

当然,可以进行进一步的优化,但这会引入一些概念。即:函数、字典、if 语句、f 字符串和 *args 作为函数参数。

我决定在底部显示一些额外的信息,包括总游戏数和平局数。

import random

def winner(p1, p2):
    return (3 + p1 - p2) % 3

def score_round():
    roll = random.randint(1,3), random.randint(1,3)
    w = winner(*roll)
    if w == 0:
        scores[w] += 1
        print('Tie')
        return
    scores[w] += 1
    print(f"Player {w} Wins")
    return

num_games = 3
games_to_win = num_games // 2 + 1
games_played = 0
scores = {0:0, 1:0, 2:0}
while True:
    score_round()
    games_played += 1
    if scores[1] == games_to_win or scores[2] == games_to_win:
        break

if scores[1] > scores[2]: print(f"Player 1 wins: {scores[1]} - {scores[2]}")
else: print(f"Player 2 wins: {scores[2]} - {scores[1]}")
print(f"Games played: {games_played}, Ties: {scores[0]}")

推荐阅读