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:
    

    for ループ内でPlayers構文エラーが発生します。なにが問題ですか?

更新として、リストの作成についてあなたが言ったことについて考えましたが、勝者を見つけるためにコードを作成する方法をまだよく理解していません.

例えば

リストを作っても、実際にプレイしているプレイヤーの数がわからなければ、リストの要素を比較することはできません。何人が遊んでいるか知っていたら、

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 までの数値のリストを作成するため、Players だけでなく範囲 (Players) を反復処理する必要があります。ある種のシーケンス形式です。

編集(フォローアップの質問に答えるために):全体を繰り返し、表示される最大値を追跡することにより、リスト内の最大値を見つけることができます:

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

最後に、highestIndex は最高スコアを持つプレイヤーのリストのインデックスを保持します。

Python には、リスト内の最大値を取得する組み込み関数 max() もあります。ただし、その値の場所はわかりません。この場合、使用するのは面倒です。

于 2012-07-30T10:45:08.033 に答える