Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我写了一个简单的石头剪纸程序,但我想从三个程序中取其精华,不知道如何将其写入现有代码中_Python_Python 3.x - Fatal编程技术网

Python 我写了一个简单的石头剪纸程序,但我想从三个程序中取其精华,不知道如何将其写入现有代码中

Python 我写了一个简单的石头剪纸程序,但我想从三个程序中取其精华,不知道如何将其写入现有代码中,python,python-3.x,Python,Python 3.x,正如标题所示,我是新来的,正在努力磨练我的技能,但我不知道如何去做。。。任何帮助都将不胜感激 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:

正如标题所示,我是新来的,正在努力磨练我的技能,但我不知道如何去做。。。任何帮助都将不胜感激

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循环


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

看看标题中建议的代码和要求,
player1 = 0 
player2 = 0 
if player1 >= 2:
    print('Player 1 Wins best out of 3')
    break
elif player2 >= 2:
    print('Player 2 Wins best out of 3')
    break
您可以更改现有的“作为功能使用”和以下代码:

def rps(best_of_n=3):
    player1_win = 0
    player2_win = 0
    while best_of_n>0:
        best_of_n = best_of_n - 1
        roll = random.randint(1,3), random.randint(1,3)
        if roll in tie:
            print('Tie')
        elif roll in playerOneWin:
            player1_win = player1_win + 1
            print('Player 1 Wins')
        elif roll in playerTwoWin:
            player2_win = player2_win + 1
            print('Player 2 Wins')
    if player2_win > player1_win:
        print('player 2 win the game')
    else:
        print('player 1 win the game.')
或者,如果要修改while循环,只需执行以下操作:

n = 3
while n>0:
    n = n - 1
    roll = random.randint(1,3), random.randint(1,3)
    if roll in tie:
        print('Tie')
    elif roll in playerOneWin:
        player1_win = player1_win + 1
        print('Player 1 Wins')
    elif roll in playerTwoWin:
        player2_win = player2_win + 1
        print('Player 2 Wins')
if player2_win > player1_win:
    print('player 2 win the game')
else:
    print('player 1 win the game.')

您可以初始化2个计数器变量,这些变量将跟踪每个玩家的获胜次数。当每个玩家赢了一轮时,他们各自的赢数增加1。领带不应增加任何一个计数器

您可以使用以下命令,而不是在True:时执行

while p1Wins < 2 or p2Wins < 2:

# rest of your code
当p1Wins<2或p2Wins<2时:
#代码的其余部分
当然,在
while
循环中使用适当的条件,也可以删除那些
break
语句。

import random
bestof3=[]
PlayerOnWin=[[1,3],[3,2],[2,1]]
playerTwoWin=[[3,1],[2,3],[1,2]]
平局=[[1,1],[2,2],[3,3]]
滚动列表=[]
计数器=3
当计数器>0时:
rolllist.append(random.randint(1,3))
rolllist.append(random.randint(1,3))
如果列表处于并列状态:
打印(‘领带’)
PlayerWin中的elif rolllist:
打印('玩家1获胜')
计数器-=1
bestof3.append('P1')
playerTwoWin中的elif rolllist:
打印('玩家2获胜')
计数器-=1
bestof3.append('P2')
rollist.clear()
p1=bestof3.计数('p1')
p2=bestof3.计数('p2')
如果p1>p2:打印('玩家一赢得游戏')
其他:打印('玩家2赢得游戏')
我试着保持代码的简单性。这会列出一名和两名玩家赢了什么(最好的3名),并根据赢家的不同不断添加
'P1'
'P2'
。最后,对列表进行评估,然后你得到答案

import random

def best_of(x):
    playerOneWin = ((1,3), (3,2), (2,1))
    playerTwoWin = ((3,1), (2,3), (1,2))
    tie = ((1,1), (2,2), (3,3))


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


以(3)或(5)中的最佳方式运行函数…

解决问题的一般建议:

  • 考虑一下一般的解决方案是什么,并细化到一个算法,而不是列出所有可能的结果
要实现“3胜1负”,即2次执行后2-0停止,请检查任一玩家的得分为2,并在那里结束

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

我决定在底部显示一些附加信息,包括玩过的游戏总数和平局数量

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]}")

我不知道你想要一个函数。代码更新,现在就检查。我不需要特别的函数,我只是想知道最有效的方法,你的方法是我最喜欢的。谢谢。然后请考虑投票并接受它。答案:SID:那些是元组。它们就像列表,但不可变。对外部元素使用
set
可能更好,例如
playerOnWin={(1,3)、(3,2)、(2,1)}
@blcknght谢谢,这就是我要做的……通常在“X的最佳”系列中,一旦一方赢得了超过
X/2
的比赛,你就可以提前停止。此代码始终运行所有
X