11/24の業務報告

こんばんは,図書館情報メディア研究科の安永です。
本日は,レポート提出日前日ということもあってか,
沢山の質問がありました。
====================================================
<プログラミング演習I レポート課題2に関して>
Q1.heikin というメソッドで,攻撃力の合計じゃなくて最後のキャラの攻撃力が返ってしまう。
A1.一緒にトレースし,各変数に入っている値を確認し,攻撃力の合計を扱う変数が存在しないことに気づきました。
Q2.変数kyara1,kyara2 をメソッド taiketsu に使えるのか分からない。
A2.特定のキャラ”うさぎ”の攻撃力を求める方法を尋ねると,書くことができました。なので,print(“うさぎ”) と, str=”うさぎ” print(str) を比較し,どのように書き換えれば意図したプログラムが書けるか考えてもらいました。
Q3.「★結果です」が表示された後に,計算結果が表示されない。でもエラーも出てない。
A3.print(“★結果です”)が2カ所あり,一方はその後で計算結果をprint しているのに対して, 他方はその後に何も書いていないことを指摘しました。
Q4.最大攻撃力のキャラを出せない
A4.比較対象となる初期値が上手く初期化されていなかったので、どうすればいいか一緒に考えました。
Q5.対決時に指定したキャラのステータスが表示できない
A5.配列を値とするハッシュの使い方を確認しました。
Q6.配列を値としたハッシュで、特定の値の取り出し方が分からない
A6.プログラミング演習1のページにある「第2回レポート課題」の問答を参考にしてもらいました。
Q8.ハッシュが上手く作れない
A8.キーに指定する変数を間違っていたので、ハッシュの作り方から確認をしました。
Q9.最大攻撃力のキャラは出せたが値が出せない
A9.値が配列でない1つの値しかないハッシュを例にしてキーが分かっているときの値の出し方を示して、すでにハッシュのキーは分かっているので、それを使えば値も取り出せるはずですと伝えました。
Q10.図書館愛やインパクトをカンマで区切って出したいが、どうすればいいのか。
A10.「ruby 配列 カンマ」などで検索すればいくつか方法が出てきますので、検索してみてください、と伝えました。
Q11.戦いが上手く動作しない
A11.戦わせたいキャラ名を一度全て代入してから、戦いの処理をしようとしていたのですが、キャラ名が繰り返しの中で毎回上書きされるようになっていたため、その点を指摘しました。
Q12.攻撃力の比較ができない
A12.配列を値としたハッシュの使い方がよくわかっていなかったようなので、プログラミング演習1のページを参考に解説しました。
Q13.ハッシュの中身が表示されない
A13.ハッシュのキーと値をハッシュを保存するときに使っていた変数で呼び出そうとしていたので、その点を指摘しました。
Q14.undefined method ‘+’ for nill ;nillclassというエラーがどうしてでるのか
A14.キャラの攻撃力の合計を求めるための、自己代入に使っている変数の初期化がおこなわれていないことが原因ですと回答しました。
Q15.最大値ではなく、ハッシュにテキストデータを入れた時の最後のキャラの攻撃力が表示される
A15.whileを使うと、ハッシュの中のキーと値を全て取り出すことはできないと回答しました。では何を使えばよいか、と聞いたところ、質問者はeachをが使えることに気がつきました。
Q16.最大値がが表示されない
A16.最大値を求めるメソッドの中でなんとなくハッシュを定義して、中身がないのに比較をしているのでそれを直すようにと回答しました。最大値を求めるために使うキャラの値が入っているものはなにか、と問いかけたら、ハッシュyuruyuruを引数に指定してメソッドのなかで使うことに気がついてくれました。
Q17.最大値を求めるのにsortメソッドを使いたいが、そうすると最大値とキャラ名が同期しないので、キャラ名だけ取り出せる方法はないか。
A17.それは調べて下さい、私はちょっと分かりません。それよりももとのプログラムに書いてある繰り返しで最大値を書き換えて行く方法の方が楽ですと回答しました。
Q18.プログラムを直したがハッシュの中身が表示されない
A18.リダイレクトしていたファイルを確認したところ、何も中身が保存されていなかったため、エラーが起きていました。
Q19.最大値の比較が上手く行かない
A19.配列に変換する方法を用いていたのですが、質問者の方法だとキャラ名が取り出せない形式だったため、授業でハッシュの値を比較したことがないか確認し、そちらの方法を勧めました。
Q20.最大キャラと値が表示されない
A20.最大キャラを求めるメソッドの要件を満たしていないようでしたので、課題を確認するように伝えました。また、引数の使い方について曖昧だったので、確認をしました。
Q21.攻撃力が最大になるキャラを求めるメソッドで、最大攻撃力のキャラが返り値にならない
A21.0とキャラの攻撃力を比較して、キャラの攻撃力が大きかったらキャラ名を返り値にするというプログラムだと、どのキャラでも返り値になってしまうのでそこを直して下さいと回答しました。
Q22.最大値が求められない
A22.攻撃力を求めるときに、図書館愛とインパクトを、メソッドの外で定義した配列を使って記述していたので、メソッドの外で定義した変数はメソッドの中では使えないのでそれを直して下さいと回答しました。
Q23.ファイル名を間違ってしまったが、後から変更できるか
A23.できます。
Q24.プログラムの説明を確認してほしい。作成したハッシュについての説明を始めにしているのだが、問題ないか。(プログラムの始め数十行ではメソッドの定義をおこなっているが、そちらの説明を後にしてもいいのか)
A24.説明している行番号をきちんと明記していたので、先に説明する事に意味があり、説明からその意味が読み取れるのであれば問題ないと思います、と伝えました。
Q25.undefined method `chomp’ for nil:NilClass と出たが原因が分からない
A25.リダイレクトしたファイルに何も内容が保存されていませんでした。
Q26.平均を求めるときに、メソッドの外で定義した変数がつかえないと教えられたので、その部分を消せば求められるか。
A26.eachを使って値を取り出しているなかで、whileを使って値を配列に代入しているので、一つのキャラの値を百回配列に代入していることになる。さらに配列のインデックスをeachの中で初期化しているので、次のキャラの値を百回代入したときには配列の中身が全部書き変ってしまうことを指摘し、そこを直すようにと回答しました。
Q27.最大攻撃力のキャラ名を表示させたいが、一緒にキャラの攻撃力まで表示されてしまう
A27.メソッドの返り値をキャラ名と最大攻撃力にするのはだめなので、キャラ名だけにして、表示するとき工夫してくださいと回答しました。
Q28.最大値を標準出力するやりかた
A28.メソッドのなかで定義した変数は使えないので、直近の3行のなかにあるものをうまくつかって、表示して下さいと回答しました。
Q29.キャラを対戦させるために攻撃力を比較する方法
A29.攻撃力はハッシュをつかってどう求めればよいか、と聞いたところ、最大キャラを求めるのと同じ方法を使うことに気づいてくれました。
Q30.戦いのとき2人のキャラの比較ができない
A30.図書館愛などの値を取り出そうとしていたのですが、始めにハッシュに保存するときに使っていた変数を再度使って表示させようとしていたために最後に入力された値しか表示されていませんでした。指定したキャラの値を呼び出すにはどうしたらいいか考えてもらいました。
Q31.eachなどの繰り返し文でしか使ってない変数は繰り返しの外では使えないのか?
A31.使いたい変数を初期化した位置によって使用できるか変わります。
Q32.taiketsuメソッドを動かすと最後にnilが表示される。エラーメッセージはでない。
A32.表示するメソッドだったのですが、print文の中で呼び出していたためnilが出ていました。表示するメソッドと値を返すメソッドの違いを確認しました。
Q33.平均が出せない
A33.平均値の計算方法が間違っていたので指摘しました。
Q34.対決をメソッドにしたが、動かない
A34.引数の指定を間違っていたため、指摘しました。
Q35.対決で2人のキャラを比べられない
A35.比較する攻撃力を保存する変数の扱いに誤りがあったため指摘しました
Q36.表示するメソッドと値を返すメソッドの違いがよくわからない
A36.教科書や演習資料等で確認をしました。
Q37.taiketsuメソッドが上手く動かない
A37.表示するメソッドと値を返すメソッドが混同していたため、うまく動いていませんでした。違いを確認しました。
(回答者 西野:Q14-17,21-22,26-29,鈴木:Q4-13,18-20,23-25,30-37,安永:Q1-3)
====================================================
最後まであきらめずに頑張って下さい!
ただ,レポートは,プログラムだけでなく,説明の部分にも配点がありますので,直前までバグと戦って説明が書けなかった,なんてことにならないように気を付けて下さいね!