Python 50によるプログラミングへのCS 50の導入の問題セットの解決—一度に一度:問題セット2


ここにオリジナルのブログ記事をお読みください。


別の週、別の問題セット.今回は、ループに焦点を当てています.
上の記事を読むことができますProblem Set 0 and Problem Set 1 . 免責事項を思い出させるために、これらは、解決策をすぐに解決するのではなく、問題自体について考えるだけのチュートリアルです.これで始めましょう!

キャメルケース


インthis problem , キャメルケースに文字列を入れる必要がありますlikeThis スネークケースにlike_this 変数名のPythonで推奨されます.
さて、今週はループになっているので、1文字ずつループできます.最初に空として初期化することができる結果文字列に各文字を連結することを考えることができます.大文字になると、ドキュメントからのヘルプを得ることができます.文字が上位かどうかを確認できます.文字列を結果文字列に連結するのではなく、アンダースコアとその文字を小文字で追加できます.
Pythonが簡単に1つのライナーを書くようにする1つのことはlist comprehensions . スネークケースで作業したいと言いましょう.そして、それを素晴らしく読みやすいタイトル文字列にしましょう.簡単な方法は次のようになります.
snake_case_str = 'a_very_important_heading'

result = snake_case_str.replace('_', ' ').title()

print(result) # A Very Important Heading
アンダースコアをスペースに置き換えるには、別の方法で行うこともできます.
snake_case_str = 'a_very_important_heading'

result = ''.join([' ' if char == '_' else char for char in snake_case_str]).title()

print(result) # A Very Important Heading
それは醜いと思うが、リストの理解がどのように働くかを見ることができる.これは文字通りこれと同じです.
snake_case_str = 'a_very_important_heading'
result = []

for char in snake_case_str:
    if char == '_':
        result.append(' ')
    else:
        result.append(char)

result = ''.join(result).title()

print(result) # A Very Important Heading
このコードは、リストの理解において、文字がアンダースコアである場合には、与えられた文字列をループするだけであることを説明しますresult リスト、他の文字自体を追加します.最後に、私たちはjoin リストを読み込み可能な文字列に変換する空の文字列を使用するtitle それをタイトルケースで作るために.
あなたがリストの理解を持つこの1つを解決する場合は、同様のアプローチを使用することができます.そして、それはすべてそこにある.

コークスマシン


This one を連想させるCash CS 50のコンピュータサイエンスへの自身の導入の問題は、おそらくそれの単純化されたバージョンだけです.何をするかは簡単です:我々は、マシンとして、我々は50セントで販売コークのボトルの25または10または5セントを受け入れるだけです.
エーwhile ループは、この1つで使用するために、より合理的に聞こえるかもしれません、私たちは、我々の量(50である)がまだ0以上であるかどうかチェックすることができます.覚えておくべき重要なことは、エラー処理をチェックすることです今、我々は整数で動作しているので、それを覚えて良いですinput 文字列を返し、型キャストを行う必要があります.また、ユーザは25または10または5セントだけを挿入する必要があることを確認する必要があります.もしそうならば、我々はそれから我々の量から与えられた価値を減らすことができます.彼らが合計50セントで与えるならば、我々の仕事はされます、そして、我々は彼らに少しの変化も借りません.しかし、ユーザーが50セント以上を与えるならば、どうですか?この場合、私たちが量を減らし続けるならば、我々は否定的な数に達するとわかることができます.さて、値自体がまだ同じであるので、それの絶対値は問題を解決するのに十分です.
例えば、ユーザが入るなら25 , then 10 , then 25 再び-私たちは、私たちの変更があることを知っている-10 値を減らし続けるならば.我々は出力する必要があるChange owed: 10 , この場合、我々は単に絶対値を得ることができて、我々の仕事でされることができます.どのように絶対値を取得するには?もう一度、ドキュメントをチェックしてください.

ちょうど私のtwttrを設定する


名称this problem 2006年に戻ってからのジャックドーシーから来ます.必要なのは入力文字列を取得し、母音である文字をすべて削除することです.代わりに各母音をチェックするのではなく、母音のリストを使用して、文字がそのリストにあるかどうかをチェックすると、よりエレガントなソリューションになる可能性があります.また、リストの理解も良いように使用されます.実は、この優雅さを見ましょう.
我々はスペースとコンマが好きでないと言いましょう.私はそれがナンセンスであるということを知っています、しかし、この例のために、しばらくそれを耐えてください.それで、我々は我々のストリングでどんなスペースまたはどんなコンマでも見たくありません、しかし、我々は他のすべてで大丈夫です.そして、我々の文字列がとにかく圧迫されるならば、誰が気にかけますか?できることを見ましょう
hated_ones = [' ', ',']

input_str = 'Eye of rabbit, harp string hum, turn this water into rum'

cleaned = ['' if char in hated_ones else char for char in input_str]

result = ''.join(cleaned)

print(result) # Eyeofrabbitharpstringhumturnthiswaterintorum
はい.すみません、それをあげなければなりませんでしたreference .
我々は同様の問題を解決する方法を見た今、この1つは非常に簡単です.次.

バニティ板


This problem 与えられたストリングが虚栄のプレートであるために有効であるならば、若干の条件をチェックするのを我々に要求します.
これは少しスポイラーを与えることなく説明するのは少し難しいです.私があなたに話すことができる1つのことは、リストの理解は巨大なセーバーであり、より明確な方法で問題を解決することが容易になります.例えば、文字列が何桁あるかを見たいと思います.イージー
s = 'CS50'
number_of_digits = len([char for char in s if char.isdigit()])

print(number_of_digits) # 2
もちろん、デビッドマランと言うように、私はisdigit 前にドキュメンテーションをチェックしたので.
この問題のためのドキュメントからのもう一つの宝石は、すべての句読点文字のチェックです.我々はまだまだライブラリについて話をしていない-それは週4で来ている-あなたが先に移動したい場合は、Pythonが持っていることを知っているbuilt-in module specifically for strings これは、人生全体を容易になります.
今、我々は4つの特定の条件をチェックしている.入力文字列の長さは2と6の範囲内でなければなりません.それは私たちが前に1ライナーでそれをしたように簡単です"Meal Time" problem 先週.別の条件は、最初の2文字がアルファベットであるかどうかを調べることです.ドキュメントをチェックしたなら、それは自分で話す.チェックするもう一つのものは、ストリングがスペースと句読点で明白かどうか見ることです.私は信じて、リストの理解もここでかなりうまく動作します.私たちは実際にほとんど私のtwttrを設定する最後の問題で同じことをした.そして、最後に、文字列が何かを含んでいるならば、文字列が終わるかどうかチェックする必要があります.
あまりに多くを与えないで、これについて考える1つの方法は、このようなものでしょう:私たちは、我々のストリングの数字の長さを得ることができて、そのインデックスからのストリングの残りが数字だけであるかどうかチェックします.以前に行ったことがありますが、例としてはもっと分かりやすいでしょう.
s = 'CS50'
number_of_digits = len([char for char in s if char.isdigit()])

print(s[-number_of_digits:]) # 50
負のインデックスを使用すると、この場合の桁文字の長さになるインデックスから後方に文字列を横断できます.
これらの4つのケースをチェックすることは、我々がする必要があるすべてです.私はリストの理解についてたくさん話してきたことを知っています.それがまだ明確でないならば、キャメルケースの例のように、あなたはいつも通常の拡大したバージョンを使うことができます.そして、正直に、より複雑なループは、リストの理解をはるかに複雑になります.合理的な方法は行くことです.

栄養事実


そして、おそらく最も簡単な(?)problem 今週は論理を実装する.
辞書はこのケースで使用する最も明白な選択です.必要なのは辞書を作成することです-キーとして果物の名前、および値としてのカロリーを使用してthis poster , そして、与えられた果物のためにカロリーを返してください.講義ビデオは既にそれを行う方法を示しています.また、私たちが文字通り何の代わりにも返したいNone , 空の文字列を返すことができます.そして、これは問題セット2の終わりと同様にこの問題の終わりです.
来週の問題セットは例外になるだろうし、どんな問題を解決するのかを待つのは本当にエキサイティングだ.
来週、ハッピーコーディングを参照してください.