5

我对 python 很陌生,一段时间以来一直在尝试在 python 上制作多人二十一点游戏。我遇到了很多很多问题,想知道你们是否可以帮助我解决这些问题。

import random

def total(hand):
    aces = hand.count(11)
    t = sum(hand)
    if t > 21 and aces > 0:
        while  aces > 0 and t > 21:
            t -= 10
            aces -= 1
    return t

Cards = ["2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "AH", "JH", "QH", "KH", "AC", "JC", "QC", "KC", "AS", "JS", "QS", "KS", "AD", "JD", "QD", "KD"]

Cards[35] = 11
Cards[36] = 10
Cards[37] = 10
Cards[38] = 10
Cards[39] = 11
Cards[40] = 10
Cards[41] = 10
Cards[42] = 10
Cards[43] = 11
Cards[44] = 10
Cards[45] = 10
Cards[46] = 10
Cards[47] = 11
Cards[48] = 10
Cards[49] = 10
Cards[50] = 10

Players = raw_input("How many players are there?")
for i in range Players:
    Player i = []
    Player i.append(choice(Cards))
    Player i.append(choice(Cards))
    tp = total(player)
    print "Player" + i + "Cards: " + Player i + "," + "total: " + tp
    hitorstand = raw_input("hit (h) or stand (s)?")
    if hitorstand == "h":
        Player i.append(choice(cards))
        print ("hit (h) or stand (s)?")
    elif hitorstand == "s":
        break
    else print "Please enter h or s"

dealer = []
While True:
    dealer.append(choice(cards))
    dealer.append(choice(cards))
    td = total(dealer)
    while td > 17:
        dealer.append(choice(cards))
    else:
        break
if td < tp < 21:
    "Player i wins"
else print "dealer wins"

这就是我到目前为止所拥有的。我知道有很多乱码和代码不起作用。我想知道你们是否可以让我知道代码有什么问题,并可能建议一些有关如何修复它的选项。

我现在主要担心的是:

  1. 我正在制作“多人”二十一点游戏。我不知道我应该如何为多人二十一点游戏制作循环。在我的代码中,我问有多少人在玩。如何在不知道数字是多少的情况下为游戏制作循环?

    另外,我如何创建一个函数来找出获胜者而不知道有多少玩家在玩?

  2. 我输入后

    Players = raw_input("How many players are there?") 
    for i in range Players:
    

    Playersfor 循环中的in 给了我一个语法错误。怎么了?

作为更新,我考虑了你所说的关于制作列表的内容,但我仍然不明白我应该如何制作代码来找出获胜者。

例如

即使我列出一个列表,如果我不知道实际有多少玩家在玩,我将无法比较列表中的元素。如果我知道有多少人在玩,

playerlist = [1,2,3]

我可以说

if playerlist[0] > playerlist[1], playerlist[2] and playerlist[0] < 21:
    then print "player 1 wins!"

但是由于在用户实际输入输入之前我不知道有多少人在玩,所以我不知道应该如何为获胜者编写代码。

我不知道是否有一种说法“如果这比其他人大”。我只知道怎么说“如果这比那更大”。

有没有办法在python中说“如果这比其他的大”?如果没有,你能给我一些建议来制作代码来找出获胜者吗?

4

1 回答 1

2
  1. 您的“Players”变量走在正确的轨道上。如果你在那里存储一个代表玩家数量的 int,那么任何时候你想做一些需要知道玩家数量的事情,只需使用 Players 变量。例如,您可以编写一个迭代该次数的 for 循环(就像您几乎已经得到的一样)。为了迭代播放器,您需要将它们放置在某种数据结构中(可能是列表)。

    知道玩家人数后,您可以像这样设置列表:

    playerList = []
    for i in range(Players):
        playerList[i] = [whateverDataYouWantToStoreAboutEachPlayer]
    

    之后,您可以通过引用 playerList[i] 在 for 循环中访问每个播放器。这样,您就可以为每个玩家做事,而无需提前知道玩家的数量。

  2. 当您使用 raw_input 时,输入存储为字符串。要将其用作 int(这是您想要使用它的方式),您需要先将其转换。你可以这样做

    Players = int(Players)
    

    尽管首先确保用户输入的数字实际上是一个数字会更安全,如

    while not Players.isdigit():
       Players = raw_input("Please enter an integer: ")
    Players = int(Players)
    

    此外,正如 minitech 所说(如上所示),您需要遍历范围(玩家),而不仅仅是玩家,因为这将创建一个从 0 到 Players-1 的数字列表,并且您只能遍历数据是某种序列格式。

编辑(回答后续问题):您可以通过遍历整个事物并跟踪您看到的最大值来找到列表中的最大值:

    highestIndex = 0
    for i in range(Players):
        if PlayerList[i] > playerList[highestIndex]:
            highestIndex = i

最后,highestIndex 将保存得分最高的玩家列表中的索引。

Python 还有一个内置函数 max(),它将为您提供列表中的最大值。但是,它不会为您提供该值的位置,因此在这种情况下使用会更加麻烦。

于 2012-07-30T10:45:08.033 回答