2017-10-06 1 views
0

현재 Python을 배우기 5 주째이며 블랙 잭의 매우 단순화 된 버전을 프로그래밍하려고합니다. 나는 완료에 가까운,하지만 난이 특정 오류 메시지가 번번이 수 : 여기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() 

, 4 에디션 . 그래서 나는 처음 다섯 장을 통해 다루는 원칙을 사용해야 만합니다.

+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, elifelse 문에서도 사용할 수 있습니다. 의견을 보내 주셔서 감사합니다.

+0

반환 할 적절한 값이 없다면 예외를 발생시키는 것이 올바른 일일 수 있습니다 (예 : 'ValueError (...)'). – Evert

관련 문제