Python 如何从牌组中获得具有最高牌的正确赢家

Python 如何从牌组中获得具有最高牌的正确赢家,python,Python,我从python开始,尝试编写一个纸牌游戏,其中用户和计算机玩5轮。用户和计算机必须从我创建的牌组中随机获得一张牌,赢家是拥有最高牌的那张 我的代码中有几个问题 例如,当我创建整个牌组时,我得到“bastos”牌的输出: “8德巴斯托斯”、“9德巴斯托斯”、“10德巴斯托斯”和“11德巴斯托斯”,而不是“巴斯托斯之声”、“巴斯托斯之角”、“巴斯托斯之角”和“巴斯托斯之角” 它只发生在“bastos”中,因为它是列表中的第一个变量。但我不知道如何解决这个问题 然后我对结果也有一个问题: Tu ca

我从python开始,尝试编写一个纸牌游戏,其中用户和计算机玩5轮。用户和计算机必须从我创建的牌组中随机获得一张牌,赢家是拥有最高牌的那张

我的代码中有几个问题

例如,当我创建整个牌组时,我得到“bastos”牌的输出:

“8德巴斯托斯”、“9德巴斯托斯”、“10德巴斯托斯”和“11德巴斯托斯”,而不是“巴斯托斯之声”、“巴斯托斯之角”、“巴斯托斯之角”和“巴斯托斯之角”

它只发生在“bastos”中,因为它是列表中的第一个变量。但我不知道如何解决这个问题

然后我对结果也有一个问题:

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
  • 当比较
    carta\u humano>carta\u ordenador
    时,您正在比较这些字符串,因此例如,“rey”将被视为大于“as”。你需要比较卡片的数值
  • 必须引用“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
  • 当比较
    carta\u humano>carta\u ordenador
    时,您正在比较这些字符串,因此例如,“rey”将被视为大于“as”。你需要比较卡片的数值
  • 必须引用“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.")