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

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

ただいまの
回答率

87.37%

プログラミング学習サイト「Progate」の関数のところで詰まってしまってます。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 411

score 1

Progateの関数編でつまずいているのでコードの内容を理解できるようにしたい。

私は今現在プログラミング学習サイトである「Progate」でPythonの基礎文法を勉強しておりまして、YouTubeを観たり書籍を読んだりと、ある程度のPythonの知識を網羅しましたが(したはずですが)、「関数」のところで詰まってしまいました。ということは全然網羅してないということになります。
前置きが長くなりましたが、以下のコードがどういう流れで動いているのかがちょっとよく分からないので質問させていただきます。

該当のソースコード

# 関数validateを定義
def validate(hand):
    # handの値によって条件分岐する
    if hand < 0 or hand > 2:
        return False
    else:
        return True

def print_hand(hand, name='ゲスト'):
    hands = ['グー', 'チョキ', 'パー']
    print(name + 'は' + hands[hand] + 'を出しました')

print('じゃんけんを始めます')
player_name = input('名前を入力してください: ')
print('何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand = int(input('数字を入力してください: '))

# 関数validateの戻り値がTrueの場合、以下のif~else文が実行されるようにしてください
if validate(player_hand):
    if player_name == '':
        print_hand(player_hand)
    else:
        print_hand(player_hand, player_name)
# 関数validateの戻り値がFalseの場合「正しい数値を入力してください」と出力してください
else:
    print('正しい数値を入力してください')

試したこと

  1. まずは自分で考える
  2. teratailの過去記事を参考にする

上記の2つを実行したのですが、結局わからずこちらで質問させていただく運びとなりました。

自分で考えたこと

まずはこのプログラムを動かしたときに実行されるのが関数の定義部分の下のprint文。

print('じゃんけんを始めます')
player_name = input('名前を入力してください: ')
print('何を出しますか?(0: グー, 1: チョキ, 2: パー)')
player_hand = int(input('数字を入力してください: '))

ここまでは大丈夫なんです。

次に、「if validate(player_hand):」のところが実行され上で定義しておいたvalidate()関数を呼び出す。
関数内のif文が実行されて0~2以外の数字を入力したら、これは正しいので「False」がreturnされる、と。

更にここで入れ子になっているif文で
Falseの処理が実行される。

if player_name == '':
print_hand(player_hand)
else:
print_hand(player_hand, player_name)

この時、上で定義しておいた2番目の関数が呼び出されメッセージが表示される。

という流れだと思うのですが、正直自信がないです。

間違い等がありましたら教えていただけると幸いです。昨晩とこの記事を書いている今も悶々としております。お時間をいただけませんでしょうか?
 

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • prog_learn

    2021/03/23 16:17

    なるほど。まず自分で考えるときなどは公式ドキュメントではなく「range 引数 倍数」などと検索して自分にとってわかりやすいサイトを参考にして組み立てていく、というスタイルですね。
    公式ドキュメントを見る、とのことですが文章がズラリと並んでいて「どこからどこまで読んだらいいのか」が初学者の身としては結構キツイ、メンタル的に折れてしまいそうです。
    ある程度慣れてきたら公式ドキュメントを読みたいと考えてはいます。

    キャンセル

  • K_3578

    2021/03/23 16:26

    @質問者さん
    公式ドキュメントは早めに読めるようになったほうが良いです。
    他人の記事なんかの内容は先述の通り誤っている、古くなっている可能性があるので、
    その知識を正しい物だと解釈してしまうと正しい知識が身につきません。
    最初は意味不明かもしれませんが一つずつ読んでみましょう。

    キャンセル

  • prog_learn

    2021/03/23 16:48

    @K_3578さん
    そうですよね。古い記事や間違った情報は取り入れたくありません。
    おっしゃられる通りにまず分からなかったら公式ドキュメントを閲覧する、という癖をつけたいと思います。

    キャンセル

回答 1

checkベストアンサー

+2

1. まずは自分で考える

ということなら、「デバッグ」の仕方を覚えましょう。
IDEを導入してステップ実行すれば、プログラムが処理される順番、変数の値の遷移を確認できます。
最悪、1行ごとにprint文を埋め込んで実行すれば、理解が深まるかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/03/23 16:09

    なるほど!その発想はありませんでした!コードを書いて実際に動かしてみたのですがどこがどう動いているのか分からなかったので質問させていただいたのですが、VSCodeで拡張機能を追加してデバッグしたいと思います!1行ごとのprint文も埋め込む方法も教えてくださりありがとうございます。

    キャンセル

  • 2021/03/23 17:23

    今VSCodeでプログラムをデバッグして、どういう動きなのか確認できました!
    デバッグしてみることでどういう風に実行されていくのかが分かりました。教えてくださり大変感謝しております。ありがとうございました!

    キャンセル

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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