2017-10-06 24 views
0

現在、私はPythonを習得するのに5週間掛かり、とても簡単なバージョンのBlackjackをプログラムしようとしています。 I行なわに近いですが、私は、この特定のエラーメッセージを乗り越えることはできません。ここでTypeError:int()引数は、文字列、バイトのようなオブジェクトまたは数字で、 'タプル'でなければなりません

TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple' 

は、コードは次のとおりです。

import random 

print("Welcome to my Black Jack program! Let's play!\n") 

def deal_card(): 
    Jack = 10 
    Queen = 10 
    King = 10 
    Ace = 1 
    cards = [Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King] 
    drawn_card = cards[random.randrange(1, 13)] 
    return drawn_card 

def get_player_score(): 
    first_player_card = deal_card() 
    second_player_card = deal_card() 
    sum_player_cards = first_player_card + second_player_card 
    print ("Your card total is: ", sum_player_cards, ".", sep="") 
    while sum_player_cards < 21: 
     choice = int(input("Would you like to hit or stay? Enter 1 for 'hit' or 2 for 'stay'. ")) 
     if choice == 1: 
      new_card = deal_card() 
      sum_player_cards = sum_player_cards + new_card 
      print ("Your new total is: ", sum_player_cards, ".", sep="") 
     elif choice == 2: 
      return() 
     else: 
      print("Please choose 'hit' or stay'.") 
      choice = input("Would you like to hit or stay? Enter 1 for 'hit' or 2 for 'stay'. ") 
    if sum_player_cards > 21: 
     return() 
    return int(sum_player_cards) 

def get_dealer_score(): 
    first_dealer_card = deal_card() 
    second_dealer_card = deal_card() 
    sum_dealer_cards = int(first_dealer_card + second_dealer_card) 
    while sum_dealer_cards <= 16: 
     another_dealer_card = deal_card() 
     sum_dealer_cards = sum_dealer_cards + another_dealer_card 
    if sum_dealer_cards > 16: 
     print("The dealer's card total is: ", sum_dealer_cards, ".", sep="") 
    return int(sum_dealer_cards) 

def main(): 
    player_score = get_player_score() 
    dealer_score = get_dealer_score() 
    if player_score > dealer_score and player_score <= 21: 
     print("You win!") 
    elif dealer_score > player_score and dealer_score <= 21: 
     print("The dealer wins!") 
    elif dealer_score <= 21 and player_score > 21: 
     print("You've gone bust! Dealer wins!") 
    elif dealer_score > 21: 
     print("The dealer busts! You win!") 

main() 

私は、Python、第4版で出始めにかろうじて5つの章をしています。だから私は最初の5つの章でカバーされている原則だけを使うべきです。

+2

'return()'のような文は空のタプル '()'を返します。何も返さない場合は、 'return'を使います。あなたのケースでは、 'return 0'がもっと適切かもしれませんが、分かりません。 – Evert

+0

さまざまな 'int(...)'呼び出しについて興味があります。おそらくユーザ入力(これは常に文字列)のためのもの以外の必要性はほとんどありません。 – Evert

+1

これは、デバッグのためのprint文を求めていました。おそらく次回はそのことをやるべきでしょう。 –

答えて

0

@Evertと@Wiggy A.のおかげで、get_player_score機能でreturnステートメントを修正しました。 return 0またはreturnの代わりに、文をreturn sum_player_cardsに変更する必要があることを認識しました。 returnステートメントは、関数定義の最後に使用されたときだけ値を返すことができると私は思った。しかし、それらはif,elif、およびelseステートメントでも使用できます。入力いただきありがとうございます。

+0

戻り値が適切でない場合は、代わりに例外を発生させることが適切な場合があります(ValueError(...)など)。 – Evert

関連する問題