質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

unexpected EOF while parsing のエラーが消せません

songyong
songyong

総合スコア21

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2回答

0評価

0クリップ

752閲覧

投稿2018/04/14 14:54

編集2018/04/14 15:37

プログラミング初心者です。以下のソースですが、どこに問題があるかわかりません。助けてください。

ブラックジャックゲームを作成しています。
実行時にエラーが発生します。スタンドかヒットかダブルかをインプットで数字を入力したあと、後続の処理に進みません。

環境はatomを使用しております。Python 3.6.5

発生している問題・エラーメッセージ

STAND:1, HIT:2, DOUBLE:3 > 1
STAND:1, HIT:2, DOUBLE:3 > 1
STAND:1, HIT:2, DOUBLE:3 >
Traceback (most recent call last):
File "blackjack.py", line 191, in <module>
main()
File "blackjack.py", line 162, in main
op = input('STAND:1, HIT:2, DOUBLE:3 > ')
File "<string>", line 0

^

SyntaxError: unexpected EOF while parsing

該当のソースコード

Python3

import random; def win_lose(dealer_hand, player_hand, bet, player_money): player_point = get_point(player_hand) dealer_point = get_point(dealer_hand) if player_point <= 21: if (player_point > dealer_point) or (dealer_point > 21) : if player_point == 21: return('<<Player WIN !!>>',player_money + int(bet*2.5)) else: return('<<Player WIN !!>>',player_money + bet*2) elif player_point == dealer_point: return('<<PUSH>>',player_money + bet) else: return('<<YOU LOSE>>', player_money) else: return('<<YOU LOSE>>', player_money) def player_op(deck, player_hand, op): doubled, ending = False, False if op == '1': print('[PLAYER : STAND]') doubled, ending = False, True print(op) print(doubled) print(ending) import pdb; pdb.set_trace() elif op == '2': print('[PLAYER : HIT]') player_hand.append(deck.pop()) print_player_hand(player_hand) doubled, ending = False, False elif op == '3': if len(player_hand) == 2: print('[PLAYER : DOUBLE]') player_hand.append(deck.pop()) print_player_hand(player_hand) doubled, ending = True, True else: print('(DOUBLE CAN NOT BE ENTERED)') if get_point(player_hand) > 21: print('[PLAYER BUSTED]') ending = True elif get_point(player_hand) == 21: print('YOUR POINT IS 21') ending = True return doubled, ending def dealer_op(deck,player_hand,dealer_hand): while get_point(player_hand) <= 21: if get_point(dealer_hand) >= 17: print('[DEALER : STAND]') break else: print('[DEALER : HIT]') dealer_hand.append(deck.pop()) print_dealer_hand(dealer_hand, False) def get_point(hand): result = 0 ace_flag = False for card in hand: if card[RANK] == 1: ace_flag = True if card[RANK] > 10: num = 10 else: num = card[RANK] result += num if ace_flag and result <= 11: result += 10 return result def print_player_hand(player_hand): print('PLAYER(', get_point(player_hand), '): ') for card in player_hand: print('[', card[SUIT], card[RANK], ']') print() def print_dealer_hand(dealer_hand, uncovered): if uncovered: print('DEALER(', get_point(dealer_hand), '): ') else: print('DEALER (??) : ') flag = True for card in dealer_hand: if flag or uncovered: print('[', card[SUIT], card[RANK], ']') flag = False print() RANK , SUIT = 0,1 def make_deck(): suits = ['S','H','D','C'] ranks = range(1,14) deck = [(x,y) for x in ranks for y in suits] random.shuffle(deck) return deck def main(): turn = 1 player_money = 100 deck = make_deck() while player_money > 0: print('-'*20) print('Turn', turn) print('Amount:', player_money) print('-'*20) player_hand = [] dealer_hand = [] try: bet = int(input('ベット額 >')) except: print('整数で入力してください') continue if bet > player_money: print('所持金が不足しています') elif bet <= 0: print('ベットできる額は1円以上です') continue player_money -= bet if len(deck) < 10: deck = make_deck() for i in range(2): player_hand.append(deck.pop()) dealer_hand.append(deck.pop()) print('-'*20) print_player_hand(player_hand) print_dealer_hand(dealer_hand, False) print('-'*20) while True: op = input('STAND:1, HIT:2, DOUBLE:3 > ') doubled, ending = player_op(deck, player_hand, op) if doubled: player_money -= bet bet += bet if ending: break dealer_op(deck,player_hand,dealer_hand) print('-'*20) print_player_hand(player_hand) print_dealer_hand(dealer_hand, True) print('-'*20) message,player_money = win_lose(dealer_hand,player_hand,bet,player_money) print(message) turn += 1 input('次のターンへ') print('ゲームオーバー') if __name__ == '__main__': main()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hayataka2049

2018/04/14 15:24 編集

コードブロックの修正に苦戦されているようですが、<code>みたいなボタンを押して「```ここに言語を入力(改行) コード(改行) ```」を挿入→「ここに言語を入力→python」、「コード→書いたプログラム全文」に置き換えてそのままべたっと貼れば良いです。そして実行環境については、atomで走っているpythonのバージョンを確認して記載してください

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。