🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1792閲覧

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

prog_learn

総合スコア1

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/23 01:45

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

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

該当のソースコード

python

1# 関数validateを定義 2def validate(hand): 3 # handの値によって条件分岐する 4 if hand < 0 or hand > 2: 5 return False 6 else: 7 return True 8 9def print_hand(hand, name='ゲスト'): 10 hands = ['グー', 'チョキ', 'パー'] 11 print(name + 'は' + hands[hand] + 'を出しました') 12 13print('じゃんけんを始めます') 14player_name = input('名前を入力してください: ') 15print('何を出しますか?(0: グー, 1: チョキ, 2: パー)') 16player_hand = int(input('数字を入力してください: ')) 17 18# 関数validateの戻り値がTrueの場合、以下のif~else文が実行されるようにしてください 19if validate(player_hand): 20 if player_name == '': 21 print_hand(player_hand) 22 else: 23 print_hand(player_hand, player_name) 24# 関数validateの戻り値がFalseの場合「正しい数値を入力してください」と出力してください 25else: 26 print('正しい数値を入力してください') 27

試したこと

  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番目の関数が呼び出されメッセージが表示される。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/03/23 02:11 編集

>1.まずは自分で考える この時にどういう調べ方されました?公式ドキュメントはご一読されましたか? 基本的にプログラミングの世界では情報が次々と更新されていくので書籍や一般ユーザーの書いた記事、 teratailの過去質問などは時間が経って誤った内容へと変わっている事もあります。 唯一信用できるのは公式が出しているドキュメントだけなのでPythonにしろどんな言語でも ドキュメントを読めるようになると問題解決が早くなると思いますよ。 https://docs.python.org/ja/3/
miyabi_takatsuk

2021/03/23 03:28

> 正直自信がないです。 まず実行してみたのでしょうか? 考えただけではわからないと思いますよ。 (だって初学で知識はまだないんだから) まず実行してみて、試さないとなんもわかるようにならないかと。
prog_learn

2021/03/23 07:17

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

2021/03/23 07:26

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

2021/03/23 07:48

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

回答1

0

ベストアンサー

  1. まずは自分で考える

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

投稿2021/03/23 02:15

javahack

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

prog_learn

2021/03/23 07:09

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

2021/03/23 08:23

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問