1

私は Python Blackjack スクリプトを書いている初心者で、関数 (dealPlayer) にパラメーターが必要かどうかについて混乱しました。パラメータの有無にかかわらず、どちらの方法でも機能します。脳のおならがあったのか、途中で何かを学んだことがないのかわかりません. コードは次のとおりです。

import random

dealer = []
player = []
c = ""
deck = [2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,
            9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,11]

def dealPlayer(deck):
    cardOne = random.choice(deck)
    cardTwo = random.choice(deck)
    player.append(cardOne)
    player.append(cardTwo)
    deck.remove(cardOne)
    deck.remove(cardTwo)

問題は、関数のパラメーターとして (deck) が必要かどうかです。パラメータとして(デッキ)の有無にかかわらず機能します。さまざまなチュートリアルや他のコードに戻ってきましたが、まだ混乱しています。助けてくれてありがとう。

4

2 に答える 2

3

コードdeckがパラメータの有無にかかわらず機能する理由は、という名前のグローバル変数があるためdeckです。そのため、関数内で参照deckすると、関数は最初にローカル変数 (パラメータ) を探し、見つからない場合はそれを見つけます。 、グローバル変数を探します。

グローバル変数をまったく使用しないようにコードをリファクタリングすることをお勧めします。deck最初に関数内で定義し、必要に応じて結果または引数として他の関数に渡します。それをしたくない場合は、後で混乱を避けるために、少なくとも引数がグローバル変数をシャドウしない (同じ名前を持つ) ことを確認してください。または、プログラムに適している場合は、引数を完全に削除してグローバル変数のみを使用します。

于 2013-02-21T22:40:37.543 に答える
1

あなたの機能が次の場合、私はあなたを正しく理解しましたか?

def dealPlayer():

コードはまだ動作しますか?これにより、未定義のデッキ エラーが発生するはずです。編集:これはもちろんグローバルで間違っていました。そして、それなしで動作します。しかし、それは悪い習慣です。

def dealPlayer():
    deck = []

これにより、インデックス エラーが発生するはずです。

cardOne = random.choice()

これは TypeError を発生させます。

于 2013-02-21T22:41:13.753 に答える