前回、勉強したフォーマットを用いてスロットゲームのプログラムを修正していきます。「005.py」をコピペして「007.py」を作成して下さい。
修正対象は
print('こんにちは ' + player_name + ' さん')
と
print('現在の所持コイン数は ' + str(player_coin) + ' 枚です。')
の2カ所になります。
修正する際は、是非「フォーマット済み文字列リテラル(f-string)」か「文字列の format() メソッド」のどちらかを使うようにして下さい。修正が完了したらプログラムを動かして確認してみましょう。
項目の比較用の拡張機能を利用してみる
その4(こちら)ではファイル同士の比較方法を勉強しました。ここで一度、使い方を復習しておきましょう。比較するのは、みなさんが作成した「007.py」と以下のプログラムです。
"""スロットゲーム 簡単なスローっとゲームです。ゲームスタート時に保有しているコインを増やしましょう。 掛けコイン数を入力すると、スロットの結果が表示されます。 絵柄が揃うと、そのパターンに応じた配当倍率でコインを獲得することができます。 """ import random # "乱数" を生成するために必要なライブラリをメモリ上に読み込む(標準ライブラリ) # スロット(リール)の中身を "定数" で定義する # 配列のインデックスは 0 から始まるので、0 〜 9 番目に格納されている # 定数は全て大文字で記載する REEL_MARK_LIST = ['♠', '♥', '♥', '◆', '◆', '◆', '♣', '♣', '♣', '♣'] # プレーヤーの名前が「king」だった場合、ゲームスタート時の所持コイン数にボーナスするコイン数 KING_BONUS_COIN = 100 # プレーヤーの名前が「queen」だった場合、ゲームスタート時の所持コイン数にボーナスするコイン数 QUEEN_BONUS_COIN = 150 # ============================================================ # ゲームに必要な関数を定義する # ============================================================ def show_start_message(): """ゲーム開始のメッセージを表示する (This function is to be called to show the start message.) """ print('--------------') print('スロットゲーム') print('--------------') def ask_player_name(): """プレーヤーの名前を尋ねる (This function is to be called to ask player's name.) プレーヤーの名前を入力(input)してもらい、挨拶を表示(print)する 入力されたプレーヤーの名前を返す(return) Returns: str: プレーヤーの名前 """ player_name = input('あなたの名前を入力して下さい: ') print(f'こんにちは {player_name} さん') return player_name def ask_bets(player_coin): """現在の所持コイン数を表示した後、掛けるコイン数(bets)を尋ねる (This function is to be called to ask bets.) 所持コイン数(player_coin)は数値なので、文字列に含めたい場合は文字列(string)に変換する必要がある ==> str() 関数 input() 関数で入力した値は文字列(string)になるので整数(integer)に変換する ==> int() 関数 Args: player_coin (int): プレーヤーの所持コイン数 Returns: int: 掛けコイン数 """ print('------------------------------') print(f'現在の所持コイン数は {player_coin} 枚です。') str_bets = input('掛けコイン数を入力して下さい: ') bets = int(str_bets) return bets def show_and_get_result(): """スロットの結果(絵柄)を表示し、結果を取得する (This function is to be called to show and get result.) Returns: str: スロットの結果(絵柄) """ # TODO(佐藤宏行): ループ内で文字列を結合するのは避ける。代わりにリストに貯めて、最後に結合(join)すること # 参照: https://google.github.io/styleguide/pyguide.html#310-strings result_all = '' for i in range(3): index = random.randint(0, 9) result = REEL_MARK_LIST[index] result_all = result_all + result print(result_all) return result_all def get_division(marks): """絵柄に応じた配当倍率を取得する (This function is to be called to get division.) Args: marks (str): スロットの結果(絵柄) Returns: int: 配当倍率 """ if marks == '♠♠♠': print('超大当たり!!') return 15 elif marks == '♥♥♥': print('大当たり!') return 12 elif marks == '◆◆◆': print('大当たり!') return 10 elif marks == '♣♣♣': print('大当たり!') return 8 elif marks[0:2] == '♠♠': print('当たり!') return 5 else: print('ハズレ...') return -1 def calculate_coin(coin, bets, division): """掛けたコイン数(bets)と、配当倍率(division)を使用してプレーヤーの所持コイン数を精算する (This function is to be called to calculate (players's) coin.) Args: coin (int): プレーヤーの精算前の所持コイン数 bets (int): 掛けコイン数 division (int): 配当倍率 Returns: int: 精算後のプレーヤーの所持コイン数 """ coin = coin + bets * division return coin # ============================================================ # 実際にゲームを実行する # ============================================================ # プレーヤーの所持コイン数 player_coin = 123 show_start_message() player_name = ask_player_name() if player_name == 'king': player_coin = player_coin + KING_BONUS_COIN elif player_name == 'queen': player_coin = player_coin + QUEEN_BONUS_COIN for message in ['1回目', '2回目', '最後だよ']: print(message) bets = ask_bets(player_coin) marks = show_and_get_result() division = get_division(marks) player_coin = calculate_coin(player_coin, bets, division) print('終了です。{} さんの所持コイン数は...'.format(player_name)) print(f'最終的に {player_coin} 枚になりました!')
(おまけ)項目比較用の拡張機能を利用してみる ※興味ある人だけ対象
VS Code の標準機能ではファイル同士の比較しかできません。「Partial Diff」という拡張機能を入れると下記の比較できるようになり便利です。
- 一つのファイルの中で選択した2箇所の範囲の比較
- ファイルとクリップボードの中身の比較
- VS Code で開いているタブ同士の比較
拡張機能「Partial Diff」のインストール
拡張機能のインストールは簡単です。
- VS Code のアクティビティバーの拡張機能ボタンをクリック
(VS Code の各パーツの名称については、こちら) - 検索バーに「partial diff」と入力
- 対象を選択して内容を確認したら、「インストール」ボタンをクリック

インストールが完了したら、早速、使ってみましょう。
一つのファイルの中で選択した2箇所の範囲の比較
「何に使うんだよ!」と突っ込みたい方もいらっしゃると思いますが、意外に使う機会があります。
私は例えば「ここだけ少し修正してみたい。でも上手くいくか心配だからコメントアウトして残しておこう」という場合、あとから何を修正したかを確認するときに使います。
- 比較対象を選択して、右クリック→「Select Text for Compare」を選択
- 比較対象を選択して、右クリック→「Compare Text with Previous Seletion」を選択

ファイルとクリップボードの中身の比較
やり方は簡単です。
- 上のプログラムをコピーする
- 「007.py」を VS Code で開く
- ファイル中で右クリック→「Compare Text with Clipboard」を選択
すると、新しいタブが開いて、前回やったような比較結果を確認することができます。
当然、上のプログラムと全く同じ場合は差分が表示されないので、もしやり方が心配な方は「007.py」の内容を少し変更してから、「3」の手順を実施してみて下さい。変更した箇所が差分となって表示されるはずです。

VS Code で開いているタブ同士の比較
保存する前のファイルを比較対象にしたいときに使うのかな?正直、私は使ってないです。一応、使い方を……。
- ファイルを2個開く
- 1個を新しいエディタグループで開く
- 右クリック→「Compare Text in Visible Editors」を選択

前回の内容が多かったので、今回は少なめです。
コメント