2017-10-06 113 views
0

我目前正在學習Python五週,並且我正在嘗試編程一個非常簡化的21點。我很接近完成,但我不能讓過去的這個特定的錯誤信息:TypeError:int()參數必須是一個字符串,一個類似字節的對象或一個數字,而不是'tuple'

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版。所以我應該只使用前五章所涵蓋的原則。

+2

像'return()'這樣的語句返回一個空元組''()'。如果你不想返回任何東西,使用'return'。在你的情況下,'return 0'可能更合適,不知道。 – Evert

+0

對各種「int(...)」調用感到好奇;這似乎很少有必要,除了可能對用戶輸入(它總是一個字符串)。 – Evert

+1

這是乞求打印語句進行調試。大概下次應該會這樣做。 –

回答

0

好的,感謝@Evert和@Wiggy A.,我在get_player_score函數中修正了return聲明。我意識到我需要將陳述更改爲return sum_player_cards,而不是return 0return。我認爲return語句只能在函數定義的末尾使用時返回值。但它們也可以用於ifelifelse語句。感謝您的意見。

+0

請注意,如果沒有合適的值返回,則引發異常可能是正確的做法(例如'ValueError(...)')。 – Evert

相關問題