こんばんは,M1の安永です.
本日は質問はありませんでした.
強くて冷たい風が吹いていて,自転車に乗っていると挫けそうになりますね。
インフルエンザにかからないように,かかってしまってもうつさないように気を付けたいと思います。
(文責 安永)
日別: 2012年2月9日
2月3日の業務報告
こんばんは,M1の安永です.
2月3日の業務報告もしていませんでした.申し訳ありませんでした.
2月3日の質問と回答です.
=================================================================================
【プログラミング演習II】
Q1.(レポート課題に関して)
タイトルの書く単語の先頭文字のみを大文字に変換したあと,出力するにはどうすればいいのかがわからない。
A1.each文を使って単語の先頭文字を大文字に変換していっていたので,そのなかで文字列を繋げていく方法を提案しました。
Q2.ハッシュのソートがうまくいかない。
A2.教科書でハッシュのソートのプログラム例を一緒に確認してもらい,どのように直せばいいかを考えてもらうように伝えました。また,プログラムの中で,どこでソートを行うべきかをもう一度考えてもらいました。
Q3.(レポート課題に関して)
新ISBNを生成したときに,新チェックデジットに変わらない。
A3.正規表現の文の中で変数を扱う際は,式展開が必要になりますが,式展開せずに変数が書かれていたため,それを直してみてもらったところ,やはり変わらないままでした。プログラムをもう一度見直した結果,正規表現での条件にマッチしていないことが原因であると考えられたので,条件文か,マッチさせたい文に手を加えてみることを提案しました。また,メソッドの返り値の名前がメソッド名と同じになっていたので,念のためそこも直してもらうように伝えました。
Q4.エラーが出た理由がわからない。
A4.メソッドの定義の中で使用していた変数を,メソッドの定義の外の部分でそのまま使おうとしていたためにエラーが出ていました。
Q5.(レポート課題に関して)
本の値段を日本円に計算するメソッドを作ったが,計算結果が反映されない。
A5.メソッドの返り値を代入していなかったため,反映されていませんでした。
Q6.(レポート課題に関して)
実行結果としてExcelの表を貼付けたが,表が読みづらい。
A6.レポート提出時のフォーマットの指定がA4横書きで横向きの2段組み,とのことで,幅が足りていないようだったので,文字を小さくしてみることを提案し,また,スクリーンショットを貼付けても構わないとwikiに書かれていることを話しました。
Q7.(レポート課題に関して)
タイトルの単語の先頭だけ大文字にするのに capitalize メソッドを使ったらうまく動かない。
A7.配列の要素のひとつをcapitalizeするようにしていたのですが,指定した箇所には数字が入っていること,リダイレクトするための実行文の書き方が間違っていたことが原因と考えられました。
Q8.(レポート課題に関して)
提出の書式が、プログラムの説明以外はランドスケープ横書き二段組みと指定されていたが、エクセルでの出力結果を二段組みにするにはどうしたらいいか
A8.Q6と似た質問だったので、A6と同様文字を小さくして幅を詰めるか、スクリーンショットの画像を張り付けるのでよい、と回答しました。しかし、それでもエクセルの表は二段組みでははいらなかったので、あとは先生に確認をしてください、と回答しました。
Q9.(レポート課題に関して)
プログラムを実行すると、言語のところがすべて「その他」、nilになってしまう
A9.case A when B …のAにあたる、メソッドの引数が、==の右側にくるチェックデジットと同じ「数字」として指定されていない可能性があるので確認してみてくださいと回答しました。
Q10.(レポート課題に関して)
syntax error, unexpected $end, expecting kENDというエラーがでたがどうしてか
A10.endがひとつ余分なのでは,と回答しました。
Q11.(レポート課題に関して)
チェックデジットの計算結果が全部4になってしまう
A11.新しく生成されたISBNも全部同じになってでてきていたので、チェックデジッドを呼び出すメソッドの引数がタイトルと同期しない形で指定されていると考えられると回答しました。
Q12.(レポート課題に関して)
タイトルに使われている単語の先頭の文字だけを大文字に変えたいが、単語の全部の文字が大文字で表示されてしまう
A12.タイトルを単語に分割して配列に保存し、その配列から単語を取り出して変数に代入してて単語の先頭を大文字にする,だけの処理を繰り返すと,変数の値は次の単語を処理したときに上書きされてしまうことを説明しました。その上で、上書きされる前に、別の変数に代入してはどうか(このときに自己代入を使って,単語をつなげてタイトルを作ってしまう)と回答しました。
Q13.(レポート課題に関して)
チェックデジットの計算がうまくいかず、すべて0と表示されてしまう
A13.チェックデシットの計算をする前に、数字をひとつひとつ分割する部分できちんと数字が分割できているかチェックしてください、と回答しました。
Q14.(レポート課題に関して)
新しく計算でもとめたチェックデジットを古いものと入れ替えたいが、古いチェックデジットに新しいチェックデジットがくっついて表示されてしまう
A14.行末を参照する正規表現の前に数字か文字を表す正規表現が必要か、あるいはチェックデジットの後ろに空白や改行など余分なものが入っていて、それと置き換えをしている可能性がある、と回答しました。
Q15.(レポート課題に関して)
ソートのやりかたがわからない。ソートした結果は、ソートしたあとにprintメソッドを使って記述すればよいのか
A15.そのままソートとは別にprint(書名、ISBN…)を記述しても、表示されるのはソートする前の、表示したい変数に最後に代入された書名やISBNだけであること、sortメソッドのあとに続けてeachメソッドを使えば繰り返しができること、each内でprintメソッドを使えばよいことを伝えました。
Q16.(レポート課題に関して)
変数名をかえていったら、プログラムがうごかなくなってしまった
A16.古い変数名を使っているところがないか確認してくださいと回答しました。
Q17.(レポート課題に関して)
チェックデジットの計算がうまくいかない
A17.modの計算をする部分をプリントの記載どおり「mod」と記述していたので、modではなく演算記号を探してみてくださいと回答しました。
Q18.(レポートに関して)
タイトルがすべて大文字になってしまうのはなぜか
A18.capitalizeに!をつける方法を提示したら解決しました。
(回答者)Q1-Q7澤木 Q8-Q18西野
=================================================================================
(文責:安永)
2月2日の業務報告
こんばんは,M1安永です.
1週間前の業務報告をしていませんでした.申し訳ありません.
2月2日の質問と回答です.
=============================================================================
【プログラミング演習II】
Q1.(レポートに関して)ハッシュをタイトルでソートするのがうまくできない。
A1.教科書に参考になるサンプルプログラムが載っていることを伝え、それを基に考えてみるよう答えました。
Q2.(レポートに関して)ハッシュをタイトルでソートできているが、表示するときにソートされていないままになってしまっている
A2.ソートしたハッシュを表示する対象にせず、繰り返し文の途中で表示させようとしていたため、ソートしたハッシュを表示するように答えました。
Q3.(レポートに関して)値段がソートされた順番になっていない
A3.キーがタイトル、値がISBNのハッシュをソートしているだけでは、値段に関しては別途ソートした後のタイトルの順番に対応した表示方法を考える必要があります。その方法に関しては考えてもらいました。
Q4.(レポートに関して)分割したISBNが1つ目のタイトルだけ正しく表示されない。
A4.分割する際、「-」で分割するように指定していたのですが、表示していた最初のタイトルのISBNは元のデータに「-」が含まれていなかったため、分割できていませんでした。分割する前に「-」を追加するなどの対応を考えてみて下さい、と答えました。
Q5.(レポートに関して)ハッシュをタイトルでソートできない。
A5.ハッシュをキーでソートしたいようでしたが、教科書263ページにハッシュの値でソートする方法をそのまま使っていたのでキーでソートされていませんでした。キーでソートしたい場合は、教科書の「a[1]<=>b[1]」の部分を変更する必要があります。教科書の解説を読めば分かるかと思いますのでご参照ください。
Q6.(レポートに関して)ハッシュをsort_byメソッドを使ってソートしようとしたがエラーになる。
A6.sort_byメソッドの使い方が違っていたようだったので確認してもらいました。
Q7.(レポートに関して)値段が全て同じ値になってしまう。
A7.繰り返しのなかで使っていた変数をそのままハッシュのeach文で使っていたため、最後に代入された値段のみが表示されていました。値段は別途記録しておくなどの対応が必要です、と答えました。
Q8.(レポートに関して)値段が変換できなくなってしまった。
A8.引数である値段を呼び出す際、値段をハッシュから呼び出していたのですが、そのキーの指定が間違っていたので指摘しました。
Q9.(レポートに関して)表示が思ったようにいかない.
A9.hashA:title => isbn と,hashB:isbn=> array を用意していました.そして,hashA.each { |k, v | hashB.each { |k2,v2| print (k, v, v2) } } と書いているのが原因でした.each の中で each を書くと,組み合わせの数だけ処理が行われることを説明しました.
Q10.(レポートに関して)値段の値を配列に格納しているが,値段と書名が一致しない.さっきは書名をソートした後に,値段を配列に格納したが,そうするとエラーが出たのでやめた.
A10.値段はハッシュをソートした後に格納する必要があると思います.先程出たエラーは,移動とは関係なくおこっていると思うので,もう一度移動させて見て下さい.
Q11.(レポートに関して)エラーが出てしまってどうしようもない。エラー:syntax error, unexpected tIDENTIFIER, expecting $end
A11.文字列の連結をする時に,1カ所だけ + が抜けていたので,指摘しました
Q12.(レポートに関して)エラーが出てしまってどうしようもない。エラー:syntax error, unexpected tIDENTIFIER, expecting kDO or ‘{‘ or ‘(‘
A12.sort を使う時に, { が抜けていたので,指摘しました
Q13.(レポートに関して)変数の値がnil になってしまってエラーが出る
A13.array[0]の値がnil になっていました.array[i] = str のように値を格納する時点で変数iの値が7であったため(初期化していなかったため),array[0]には値が代入されていない,と指摘しました.
Q14.(レポートに関して)エラーが出てしまってどうしようもない。エラー:syntax error, unexpected $end, expecting kEND
A14.最初からプログラムを読み直すと,質問者が自分でend の数が1つ少ないことに気づきました.
Q15.(レポートに関して)ISBNをハイフンでsplitしたいが,うまくできない
A15.isbn.split(/-*/) と記述していました.正規表現の書き方を確かめてもらい,* は 0回以上を表すので,ハイフンが無くてもsplit されてしまう,ということに気づいてもらいました.
Q16.(レポートに関して)ISBNの数字を1字ずつ取り出したい.第4回目のチェック項目のやり方(正規表現にカッコをつけで後方参照する)が使えそうだと思ったが,実際使えるか.使えるとしたらどう使ったらいいか分からない.
A16.第4回目のチェック項目のやり方は使えると思います,と回答し,数字が1桁だった場合にどう取り出すが考えて貰いました(/(\d)/).そうすると,2桁以上だった場合の取り出し方もすぐに思いついたようでした.
回答者: Q1森川 Q2-Q8鈴木 Q9-Q16安永
=============================================================================
(文責:安永)