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

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

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

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

Q&A

解決済

2回答

1016閲覧

独学プログラマーという本の「ハングマン」のコードに関する質問です。

T_rk4649

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2019/08/02 05:59

前提・実現したいこと

独学プログラマーという本の「ハングマン」のコードに関する質問です。

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

現在、この教科書を用いて初めてPythonの勉強をしております。 まだ、勉強を始めてから1日目であり、稚拙な質問をしていたら申し訳ございません。 現在、私が疑問を抱いているのは、最後の行の「hangman("cat")」に関してなのですが、 これを書くことでゲームの当ててほしい単語を設定していると思うのですが、私は「word = cat」と書くものだと感じているのですが、なぜ「hangman("cat")」で当ててほしい単語に設定できるのでしょうか? おそらく、私が関数(def hangman(word:))の意味について十分に理解をしていないため、このように疑問を抱いていると思っています。答えて頂けると幸いです。よろしくお願いします。

該当のソースコード

def hangman(word): wrong = 0 stages = ["", "________ ", "| ", "| | ", "| 0 ", "| /|\ ", "| / \ ", "| " ] rletters = list(word) board = ["__"] * len(word) win = False print("Welcome to Hangman") while wrong < len(stages) - 1: print("\n") msg = "Guess a letter" char = input(msg) if char in rletters: cind = rletters \ .index(char) board[cind] = char rletters[cind] = '$' else: wrong += 1 print((" ".join(board))) e = wrong + 1 print("\n" .join(stages[0: e])) if "__" not in board: print("You win!") print(" ".join(board)) win = True break if not win: print("\n" .join(stages[0: \ wrong])) print("You lose! It was {}." .format(word)) hangman("cat")

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

このプログラムは

  • hangman という名前のメソッド(実際のゲームの部分)を定義する部分(def hangman(word) ...)

と、

  • hangman を呼び出して実行する部分(hangman("cat"))

の二つに分かれています。
ですから想定している「当てて欲しい単語を設定している」というのは、
後者では呼び出しのパラメータとしてであり、実際に動くメソッドとしては

  • 引数で受け取る(word)
  • その値をメソッドの中で使用する(rletters などに)

ようになっているのですよ。

投稿2019/08/02 06:14

tacsheaven

総合スコア13703

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

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

T_rk4649

2019/08/02 06:35

早速のご返事ありがとうございました。 ゲームを定義する部分と、実行する部分に分かれて書かれていたことが理解できました。 わかりやすい説明をありがとうございました。
hayataka2049

2019/08/02 07:07 編集

些末な問題ですが、この場合はメソッドではなく関数と呼ぶことがふさわしいです(グローバル変数に直接束縛される関数オブジェクトを生成するから)。回答の趣旨に影響はありません。
guest

0

数学で、f(x) = 2*x*x + 3*x + 4という関数があったとき、f(5)と書いてその値を求めるには、右辺の式のxのところを5に書き換えて計算しますよね?それと同じです。

あと、入門書を読み始めたところであれば、人に質問するのは早いです。もうちょっと読み進むと解決することがほとんどだと思います。

投稿2019/08/02 06:18

otn

総合スコア84538

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

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

T_rk4649

2019/08/02 06:30

早速のご返事ありがとうございました。 大変理解のしやすい説明をして下さりありがとうございます。 また、読み進めて解決する前に質問をしてしまい申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問