CPU 和用户收到重复的卡片。我使用了 shuffle
函数以及 pop
。有没有办法防止用户和CPU重复卡牌?
这是一个执行示例:
Here are your cards:
1) The 10 of Clubs
2) The 4 of Diamonds
3) The 6 of Diamonds
4) The 7 of Clubs
5) The 10 of ClubsTo play cards, simply type their number one at a time. When done, input blank
2 1 3 4
You played: The 4 of Diamonds The 10 of Clubs The 6 of Diamonds The 7 of Clubs
CPU played: The Jack of Spades The Jack of Spades
如您所见,用户获得了两次梅花 10。
我的代码:
import random
import math
from collections import Counter
print("Gui-less poker sucks, but it sure is addicting probably")
if 1:
deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52]
random.shuffle(deck)
hcardss = [""]
hcardsc = [""]
hcardsh = [""]
ccardss = [""]
ccardsc = [""]
ccardsh = [""]
ingame = "true"
while (ingame == "true"):
undone = 5
while (undone > 0):
card = deck.pop()
# print(card)
temp = card / 13
temp2 = card / 4
temp = math.floor(temp)
temp2 = math.floor(temp2)
temp = temp + 1
# temp2 = temp2 + 1
#print(temp)
#print(temp2)
# undone -= 1
hcardss.append(temp)
hcardsc.append(temp2)
if (temp == 1):
temp3 = " of Spades"
elif (temp == 2):
temp3 = " of Diamonds"
elif (temp == 3):
temp3 = " of Clubs"
else:
temp3 = " of Hearts"
if (temp2 == 10):
temp4 = "Jack"
elif (temp2 == 11):
temp4 = "Queen"
elif (temp2 == 12):
temp4 = "King"
elif (temp2 == 13):
temp4 = "Ace"
else:
temp4 = str(temp2 + 1)
# print("Your card was the " + temp4 + temp3)
hcardsh.append("The " + temp4 + temp3)
undone -= 1
undone = 5
random.shuffle(deck)
while (undone > 0):
# THIS ONE IS THE COMPUTER
card = deck.pop()
# print(card)
temp = card / 13
temp2 = card / 4
temp = math.floor(temp)
temp2 = math.floor(temp2)
temp = temp + 1
# temp2 = temp2 + 1
#print(temp)
#print(temp2)
# undone -= 1
ccardss.append(temp)
ccardsc.append(temp2)
if (temp == 1):
temp3 = " of Spades"
elif (temp == 2):
temp3 = " of Diamonds"
elif (temp == 3):
temp3 = " of Clubs"
else:
temp3 = " of Hearts"
if (temp2 == 10):
temp4 = "Jack"
elif (temp2 == 11):
temp4 = "Queen"
elif (temp2 == 12):
temp4 = "King"
elif (temp2 == 13):
temp4 = "Ace"
temp4 = str(temp2 + 1)
# print("Your card was the " + temp4 + temp3)
ccardsh.append("The " + temp4 + temp3)
undone -= 1
print()
print()
print()
print("Here are your cards:")
print("1) " + hcardsh[1])
print("2) " + hcardsh[2])
print("3) " + hcardsh[3])
print("4) " + hcardsh[4])
print("5) " + hcardsh[5])
print("To play cards, simply type their number one at a time. When done, input blank")
instant = "true"
doneinput = "false"
hplay = [""]
while (doneinput == "false"):
latestinput = input("> ")
if (latestinput == ""):
if (instant == "true"):
print("Okay, you fold")
ingame = "false"
exit()
doneinput = "true"
else:
if (int(latestinput) in hplay):
print("You already picked that one!")
else:
hplay.append(int(latestinput))
# print("The cards you played are " + str(hplay))
doneinput = "false"
cplay = [""]
while (doneinput == "false"):
latestinput = random.randint(1,5)
if (latestinput == ""):
doneinput = "true"
else:
if (int(latestinput) in cplay):
doneinput = "true"
else:
cplay.append(int(latestinput))
#print("So you played " + str(hplay))
#print("And the cpu played " + str(cplay))
#print("So you played the " + hcardsh[hplay[1]] + hcardsh[hplay[2]]
times = len(hplay)
# times = times - 1
hplayh = [""]
cplayh = [""]
sub = 1
print()
print()
print("You played:")
while (sub < times):
hplayh.append(hcardsh[hplay[sub]])
print(hcardsh[hplay[sub]])
sub += 1
sub = 1
times = len(cplay)
print()
print()
print("CPU played:")
while (sub < times):
cplayh.append(ccardsh[cplay[sub]])
print(ccardsh[cplay[sub]])
sub += 1
#print(str(hplay)
#print(str(cplayh))
hscore = 0
cscore = 0
#checker = 1
#highnumber = 0
#quantity = [""]
#quancheck = 0
htrans = [""]
temp5 = 1
while (len(hplay) > temp5):
htrans.append(int(hcardsc[hplay]))
temp5 += 1
ctrans = [""]
temp5 = 1
while (len(cplay) > temp5):
ctrans.append(int(ccardsc[cplay]))
temp5 += 1
hoccur = Counter(htrans).most_common()
coccur = Counter(ctrans).most_common()
print(hoccur)
#while (len(hplay) > checker):
# if (hcardsc[hplay[checker]] > highnumber):
# quancheck += 1
# quantity.append(quancheck)
#checker += 1
ingame = "false"
最佳答案
通过打乱列表并从中弹出值来生成 1 到 52 之间的卡号的方式是正确的。
问题在于你如何根据牌号生成牌的花色和面值。
例如,
- 楼层(26/4)= 7,楼层(27/4)= 7
- 楼层(26/13)= 2,楼层(27/13)= 2
因此 26 和 27 将被解释为同一张牌。
保留你原来的想法,你可以使用除以 13 的商和余数:
q = card_num // 13 # integer division
r = card_num % 13 # modulo operator
或者同时使用 divmod
:
q, r = divmod(26, 13)
print(q,r)
# (2, 0)
q, r = divmod(27, 13)
print(q,r)
# (2, 1)
你将有 0 <= q <= 3 和 0 <= r <= 13
附注:
您可以改进代码中的一些内容。一个简单的改变:
deck = list(range(1, 53))
会更短! ;)
关于python - 如何停止获得重复的随机值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45220770/