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
。