该程序在逻辑上是错误的还是具有我似乎找不到的语法?

时间:2019-05-27 15:04:22

标签: python

我正在帮助我的前任老师,并且需要有关此代码的帮助。我正在编写一个制作30张独特卡片的python程序。 10是红色,10是黑色,10是黄色。我只在代码中使用了红色,以便于调试。我需要使它们具有我认为可以正常工作的功能,但随后我需要分发它们并在末尾显示它们,但是玩家的手不能彼此相同,并且自己的手不能重复(就像您在游戏中那样)的实际版本)。所以我需要设置一个检查系统。我真的找不到问题,不胜感激,因为这很容易解决,或者超出了我自己的范围。感谢您的阅读。

P.S 我知道每个人都有两只牌手,但这是在牌手赢得一场比赛时增加的,所以我可以比较谁拥有最多的牌以及最终得到的牌。

我尝试使用不同的循环对其进行更改,并用伪代码编写它并进行比较,但不知道发生了什么。

{import sys, random, time
this = sys.modules[__name__]

def redCardGen():
    for i in range(0,11, 1):
        setattr(this, 'R%s' % i, 'Red Card %s' % i)

def blackCardGen():
    for i in range(0,11, 1):
        setattr(this, 'B%s' % i, 'Black Card %s' % i)

def yellowCardGen():
    for i in range(0,11, 1):
        setattr(this, 'Y%s' % i, 'Yellow Card %s' % i)

redCardGen()

blackCardGen()
yellowCardGen()

breaker = 0

player1Hand = []
player2Hand = []
WinnnerDeck = []
WinnerDeck2 = []

Red = [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10]



play = input("Would you like to play the game?: ")
if(play == "yes"):
    print("Okay, then lets play!")
else:
    exit()
for i in range(0,6, 1):
    player1Hand.append(random.choice(Red))
    player2Hand.append(random.choice(Red))
breaker1 = 0
while(breaker1 == 0):
    if (player1Hand != 5):
        player1Hand.append(random.choice(Red))
        player2Hand.append(random.choice(Red))
    elif ((len(set(player1Hand))==1) and (len(set(player2Hand))==1)):
        player1Hand.pop()
        player2Hand.pop()
        player1Hand.append(random.choice(Red))
        player2Hand.append(random.choice(Red))
    elif ((len(set(player1Hand and player2Hand)) == 1)):
        player1Hand.pop()
        player2Hand.pop()
        player1Hand.append(random.choice(Red))
        player2Hand.append(random.choice(Red))
    else:
        breaker1 = 1

print(player1Hand)
print(player2Hand)}

没有错误,所以我认为这不是语法问题,而是逻辑错误。 我的预期结果是有两只随机拿牌的玩家牌,但没有一张是一样的。

2 个答案:

答案 0 :(得分:1)

使用random.shuffle()分配卡片的示例:

import random

deck = ["R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8", "R9", "R10"]
random.shuffle(deck)

player1_hand = deck[:5]
player2_hand = deck[5:10]
print(player1_hand)
print(player2_hand)

返回:

['R4', 'R2', 'R10', 'R5', 'R1']
['R7', 'R8', 'R9', 'R3', 'R6']

答案 1 :(得分:0)

如果要模拟一副纸牌,最好有一个代表它的列表,以便可以对其进行洗牌并使用从顶部绘制纸牌(并将其删除)的功能:

import random

cardDeck    = [C+str(n+1) for C in "RBY" for n in range(10)]
player1Hand = []
player2Hand = []

# deal cards
random.shuffle(cardDeck)
for _ in range(5):
    player1Hand.append(cardDeck.pop())
    player2Hand.append(cardDeck.pop())

print(player1Hand) # ['Y3', 'B10', 'Y5', 'R2', 'Y8']
print(player2Hand) # ['Y10', 'B6', 'Y1', 'R9', 'R7']

这种方法将使从卡组中抽出更多卡片变得更加容易,而不必担心重复。