Python 如何从牌组中获得具有最高牌的正确赢家
我从python开始,尝试编写一个纸牌游戏,其中用户和计算机玩5轮。用户和计算机必须从我创建的牌组中随机获得一张牌,赢家是拥有最高牌的那张 我的代码中有几个问题 例如,当我创建整个牌组时,我得到“bastos”牌的输出: “8德巴斯托斯”、“9德巴斯托斯”、“10德巴斯托斯”和“11德巴斯托斯”,而不是“巴斯托斯之声”、“巴斯托斯之角”、“巴斯托斯之角”和“巴斯托斯之角” 它只发生在“bastos”中,因为它是列表中的第一个变量。但我不知道如何解决这个问题 然后我对结果也有一个问题:Python 如何从牌组中获得具有最高牌的正确赢家,python,Python,我从python开始,尝试编写一个纸牌游戏,其中用户和计算机玩5轮。用户和计算机必须从我创建的牌组中随机获得一张牌,赢家是拥有最高牌的那张 我的代码中有几个问题 例如,当我创建整个牌组时,我得到“bastos”牌的输出: “8德巴斯托斯”、“9德巴斯托斯”、“10德巴斯托斯”和“11德巴斯托斯”,而不是“巴斯托斯之声”、“巴斯托斯之角”、“巴斯托斯之角”和“巴斯托斯之角” 它只发生在“bastos”中,因为它是列表中的第一个变量。但我不知道如何解决这个问题 然后我对结果也有一个问题: Tu ca
Tu carta es caballo de oros > Your card is King of Gold
La carta del ordenador es sota de espadas > Your card is Jokey of Spades
Esta ronda la ha ganado el ordenador. > The computer has won this round.
因此,我的程序说,当电脑不正常时,它已经赢了
我在绘画方面也有类似的问题。我的课程不承认任何抽签,例如:
Tu carta es 5 de espadas > Your card is 5 of spaces
La carta del ordenador es 5 de copas > Computer's card is 5 of coups.
Has ganado. > You have won.
这是我到目前为止的全部代码:
import random
print("Who will be the best out of 5 rounds?")
contador_humano = 0
contador_ordenador = 0
rondas = 0
while rondas < 5:
rondas = rondas + 1
print("\nRounds", rondas)
palos = ["bastos", "copas", "espadas", "oros"]
num = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
baraja = []
for n in num:
for palo in palos:
carta = "{} de {}".format(n,palo)
for c in carta:
if n == 8:
n = sota
elif n == 9:
n = "caballo"
elif n == 10:
n = "rey"
elif n == 11:
n = "as"
baraja.append(carta)
random.shuffle(baraja)
input("\nPress enter to shuffle.")
print(baraja)
carta_humano = random.choice(baraja)
print("\nThis is your card", carta_humano)
baraja.remove(carta_humano)
carta_ordenador = random.choice(baraja)
print("This is the computer card", carta_ordenador)
if carta_humano > carta_ordenador:
contador_humano += 1
contador_ordenador += 0
print("\nYou have won this round.")
elif carta_humano == carta_ordenador:
contador_humano += 0
contador_ordenador += 0
print("\nThis is a draw.")
else:
contador_humano += 0
contador_ordenador += 1
print("\nThe computer has won this round.")
baraja.append(carta_humano)
random.shuffle(baraja)
print("\nFinal score:", contador_humano, " - ", contador_ordenador)
if contador_humano > contador_ordenador:
print("You win!")
elif contador_humano == contador_ordenador:
print("It is a draw.")
elif contador_humano < contador_ordenador:
print("You lose.")
随机导入
打印(“5轮中谁是最好的?”)
contador_humano=0
contador_ordenador=0
朗达斯=0
而rondas<5:
隆达斯=隆达斯+1
打印(“\n圈”,rondas)
帕洛斯=[“巴斯托斯”、“科帕斯”、“埃斯帕达斯”、“奥罗斯”]
num=[2,3,4,5,6,7,8,9,10,11]
巴拉哈=[]
对于n in num:
对于帕洛斯的帕洛:
carta=“{}de{}”。格式(n,palo)
对于carta中的c:
如果n==8:
n=sota
elif n==9:
n=“卡巴洛”
elif n==10:
n=“rey”
elif n==11:
n=“as”
baraja.append(carta)
随机。洗牌(巴拉哈)
输入(“\n按enter键洗牌。”)
印刷品(巴拉哈)
carta_humano=随机选择(baraja)
打印(“\n这是您的卡片”,carta_humano)
baraja.移除(人形手推车)
carta_ordenador=随机选择(baraja)
打印(“这是电脑卡”,carta_ordenador)
如果人道主义宪章>人道主义宪章:
contador_humano+=1
contador_ordenador+=0
打印(“\n您赢得了这一轮。”)
elif carta_humano==carta_ordenador:
contador_humano+=0
contador_ordenador+=0
打印(“\n这是一张图。”)
其他:
contador_humano+=0
contador_ordenador+=1
打印(“\n计算机已赢得这一轮。”)
baraja.append(人形手推车)
随机。洗牌(巴拉哈)
打印(“\n最终分数:”,contador\u humano,“-”,contador\u ordenador)
如果contador_humano>contador_ordenador:
打印(“你赢了!”)
elif contador_humano==contador_ordenador:
打印(“这是一张平局。”)
elif contador_humano
一些问题:
将迭代对于carta中的c
中的每个字符。那不是你想要的carta
- 将值分配给
后更改carta
,将不会更改n
carta
- 当比较
时,您正在比较这些字符串,因此例如,“rey”将被视为大于“as”。你需要比较卡片的数值carta\u humano>carta\u ordenador
- 必须引用“sotas”
\uuuu repr\uuu
方法来生成“nice”名称。通过将其定义为元组,顺序基于第一个成员(秩),这正是我们所需要的
我也不会随机洗牌和挑选一张牌。如果你已经洗牌,你可以只拿最后一张牌。这就像选择一个随机的一样随机。你把选中的牌放回牌组,但在我看来,这太过分了。有足够玩5轮的牌,所以不要费心把它们放回去。但这只是我的意见。这对你的问题不是必要的
最后的elif
可以只是一个else
,因为只剩下一个可能性
以下是它的工作原理:
import random
from collections import namedtuple
class Card(namedtuple('Card', ['rank', 'suit'])):
def __repr__(self):
return "{} of {}".format(self.rank if self.rank < 8 else ["sota", "caballo", "rey", "as"][self.rank-8], self.suit)
print("Who will be the best out of 5 rounds?")
contador_humano = 0
contador_ordenador = 0
baraja = [Card(rank, suit)
for suit in ["bastos", "copas", "espadas", "oros"]
for rank in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]
random.shuffle(baraja)
for rondas in range(1, 6):
input("\nPress enter to start round {}".format(rondas))
carta_humano = baraja.pop()
print("\nThis is your card: {}".format(carta_humano))
carta_ordenador = baraja.pop()
print("This is the computer card: {}".format(carta_ordenador))
if carta_humano > carta_ordenador:
contador_humano += 1
print("\nYou have won this round.")
elif carta_humano == carta_ordenador:
print("\nThis is a draw.")
else:
contador_ordenador += 1
print("\nThe computer has won this round.")
print("\nFinal score:", contador_humano, " - ", contador_ordenador)
if contador_humano > contador_ordenador:
print("You win!")
elif contador_humano == contador_ordenador:
print("It is a draw.")
else:
print("You lose.")
随机导入
从集合导入namedtuple
班级卡(名为双('Card',['rank','suit']):
定义报告(自我):
返回{}的{}。格式(self.rank如果self.rank<8,则self.rank为else[“sota”、“caballo”、“rey”、“as”][self.rank-8],self.suit)
打印(“5轮中谁是最好的?”)
contador_humano=0
contador_ordenador=0
baraja=[卡片(等级、套装)
适用于[“巴斯托斯”、“科帕斯”、“埃斯帕达斯”、“奥罗斯”]
在[2,3,4,5,6,7,8,9,10,11]中排名
随机。洗牌(巴拉哈)
对于范围(1,6)内的rondas:
输入(“\n按enter开始第{}”轮。格式(rondas))
carta_humano=baraja.pop()
打印(“\n这是您的卡片:{}”。格式(carta_humano))
carta_ordenador=baraja.pop()
打印(“这是计算机卡:{}”。格式(carta_ordenador))
如果人道主义宪章>人道主义宪章:
contador_humano+=1
打印(“\n您赢得了这一轮。”)
elif carta_humano==carta_ordenador:
打印(“\n这是一张图。”)
其他:
contador_ordenador+=1
打印(“\n计算机已赢得这一轮。”)
打印(“\n最终分数:”,contador\u humano,“-”,contador\u ordenador)
如果contador_humano>contador_ordenador:
打印(“你赢了!”)
elif contador_humano==contador_ordenador:
打印(“这是一张平局。”)
其他:
打印(“你输了。”)
一些问题:
将迭代对于carta中的c
中的每个字符。那不是你想要的carta
- 将值分配给
后更改carta
,将不会更改n
carta
- 当比较
时,您正在比较这些字符串,因此例如,“rey”将被视为大于“as”。你需要比较卡片的数值carta\u humano>carta\u ordenador
- 必须引用“sotas”
import random
print("Who will be the best out of 5 rounds?")
contador_humano = 0
contador_ordenador = 0
rondas = 0
while rondas < 5:
rondas = rondas + 1
print("\nRounds", rondas)
palos = ["bastos", "copas", "espadas", "oros"]
num = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
baraja = []
for n in num:
for palo in palos:
carta = "{} de {}".format(n,palo)
baraja.append(carta)
random.shuffle(baraja)
input("\nPress enter to shuffle.")
print(baraja)
carta_humano = random.choice(baraja)
print("\nThis is your card", carta_humano)
baraja.remove(carta_humano)
carta_ordenador = random.choice(baraja)
print("This is the computer card", carta_ordenador)
# get the number portion of carta_humano
num_carta_humano = int(carta_humano.split()[0])
# get the number portion of carta_ordenador
num_carta_ordenador = int(carta_ordenador.split()[0])
if num_carta_humano > num_carta_ordenador: # compare numeric portion of each card
contador_humano += 1
contador_ordenador += 0
print("\nYou have won this round.")
elif num_carta_humano == num_carta_ordenador: # compare numeric portion of each card
contador_humano += 0
contador_ordenador += 0
print("\nThis is a draw.")
else:
contador_humano += 0
contador_ordenador += 1
print("\nThe computer has won this round.")
baraja.append(carta_humano)
random.shuffle(baraja)
print("\nFinal score:", contador_humano, " - ", contador_ordenador)
if contador_humano > contador_ordenador:
print("You win!")
elif contador_humano == contador_ordenador:
print("It is a draw.")
elif contador_humano < contador_ordenador:
print("You lose.")
import random
def replace_num_carta(baraja, carta):
# return the text representation of a card, replacing 8-11 with sota-as
if int(carta.split()[0]) == 8: # if the first word in the split string is 8
return ('sota de ' + carta.split()[-1]) # print 'sota de' concatenated to the last word of the split string
elif int(carta.split()[0]) == 9: # if the first word in the split string is 9
return ('caballo de ' + carta.split()[-1]) # print 'caballo de' concatenated to the last word of the split string
elif int(carta.split()[0]) == 10: # if the first word in the split string is 10
return ('rey de ' + carta.split()[-1]) # print 'rey de' concatenated to the last word of the split string
elif int(carta.split()[0]) == 11: # if the first word in the split string is 11
return ('as de ' + carta.split()[-1]) # print 'as de' concatenated to the last word of the split string
else:
return(carta)
print("Who will be the best out of 5 rounds?")
contador_humano = 0
contador_ordenador = 0
rondas = 0
while rondas < 5:
rondas = rondas + 1
print("\nRounds", rondas)
palos = ["bastos", "copas", "espadas", "oros"]
num = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
baraja = []
for n in num:
for palo in palos:
carta = "{} de {}".format(n,palo)
baraja.append(carta)
random.shuffle(baraja)
input("\nPress enter to shuffle.")
baraja_to_print = []
for carta in baraja:
baraja_to_print.append(replace_num_carta(baraja, carta)) # append the current card, after running through the function replace_num_carta
print(baraja_to_print)
carta_humano = random.choice(baraja)
print("\nThis is your card " + replace_num_carta(baraja, carta_humano))
baraja.remove(carta_humano)
carta_ordenador = random.choice(baraja)
print("This is the computer card " + replace_num_carta(baraja, carta_ordenador))
# get the number portion of carta_humano
num_carta_humano = int(carta_humano.split()[0])
# get the number portion of carta_ordenador
num_carta_ordenador = int(carta_ordenador.split()[0])
if num_carta_humano > num_carta_ordenador: # compare numeric portion of each card
contador_humano += 1
contador_ordenador += 0
print("\nYou have won this round.")
elif num_carta_humano == num_carta_ordenador: # compare numeric portion of each card
contador_humano += 0
contador_ordenador += 0
print("\nThis is a draw.")
else:
contador_humano += 0
contador_ordenador += 1
print("\nThe computer has won this round.")
baraja.append(carta_humano)
random.shuffle(baraja)
print("\nFinal score:", contador_humano, " - ", contador_ordenador)
if contador_humano > contador_ordenador:
print("You win!")
elif contador_humano == contador_ordenador:
print("It is a draw.")
elif contador_humano < contador_ordenador:
print("You lose.")