百鬼夜行

素性を知られぬままエンジニアになることを目指します

Udacity: Introduction to Computer Science Lesson 5 の途中までやった(関数編)

関数や制御などに突入

関数について

  • 全部のリンクを見つけるWebクローラを見つけるためのコードを書く
  • その際に必要なのが関数と制御
    • 関数: Procedures
    • 制御: Control
  • 配列の:は最初からと最後まで
  • なぜコードをまとめるのか?
    • 関数を抽象化する
    • 何度も繰り返すことを避けられる
  • 関数は入力を使って行うもの
  • 結果として出力を作り出すものは複数あることもある
  • 組み込み演算子も関数のように動くが、構文が違う
    • ただし抽象的に作用するものとしては同じ概念になる

Pythonが提供する関数の構造体について

def <name>(<parameters input>):
    <block>

構造体について詳しく

  • Inputsはコンマで区切られた名前のリスト
  • 入力がない場合は何もないかっこになる
  • Blockは関数の主要部分となる実行したいコードの一連の文
  • 通常4つのインデントする
  • インタプリタはインデントじゃないところを把握する

関数を作る際のポイント

  • 結果で行いたいこと(Print)は関数の中に入れない
  • 出力したい値は、returnを使って値を戻してあげる
Return <expression>, ...
  • 出力を何も返さなければ、returnの後に何も書かない
  • 副作用 = 出力ではなく関数内の実行結果をprintで見ることができる

関数の使い方

<procedure> (<input>, <input>,,...)
  • 左から関数名、入力リスト
    • 入力リストは関数が要求する入力数と同じにしないといけない
    • operands, argument という引数
    • これまでにも同じようなものと触れてきた
ex. find('au', 3)

しかしfindには別の入力がある

page.find('au', 3)
  • .の前にある「Page」は関数を呼び出すこととよく似ているが後でやる
  • 自身で定義した関数では関数を呼び出すための手前のオブジェクトはいらない
print rest_of_string('audacity')

こうすると表示される。

中身の話

  • 関数を呼び出すと関数の主要部分を直接実行できる
  • インタプリタが何を行なっているのかを判断できる
  • 関数を呼び出すと関数内でコードを直接実行する
  • パラメータに入力として渡した値を代入する
  • returnは「ジャンプ」する
    • 関数を呼び出した場所へ一気に戻る
    • ジャンプした際に評価したも値が返した値になる
  • 入力を出力と関連づけよう
  • 値がないことを示すために特別な値Noneが使われる
  • 関数の合成 = procedure(procedure())

nodebrew install で Failed to create the file と怒られたときの解決法

nodebrew install 時に Failed to create the file と怒られた。

% nodebrew install-binary v7.9.0
Fetching: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz
Warning: Failed to create the file 
Warning: /Users/yagyosan/.nodebrew/src/v7.9.0/node-v7.9.0-darwin-x64.tar.gz: 
Warning: No such file or directory
                                                                           0.0%
curl: (23) Failed writing body (0 != 941)
download failed: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz

ディレクトリがないとのことなので作ってあげたら通った。

% mkdir ~/.nodebrew             
% mkdir ~/.nodebrew/src
% nodebrew install-binary v7.9.0
Fetching: https://nodejs.org/dist/v7.9.0/node-v7.9.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

Udacity: Introduction to Computer Science Lesson 4 をやり終えた

  • pythonはスペースが重要
    • 新しい行やインデントや始まりや終わりを示す
  • バッカス・ナウア記法は数式をどのように作成できるか確認する言語を理解するために利用できる
    • またインタプリタで挿入した文字列を分解するために文法も使用する
    • 文法を使ってプログラムの構成要素に変換する
  • プログラムを書いたらインタプリタで実行する
  • インタプリタで組み込まれている文法で文字列を分解する

バッカス・ナウア記法、よくわかってないのう...。

Udacity: Introduction to Computer Science Lesson 3 をやり終えた

オプションの問題など。

  • len(): 文字列の長さを返す
  • string[::-1]: "-1"は末尾から、::は逆向きを意味する

Grammerがやっぱりよくわかってない。

Udacity: Introduction to Computer Science Lesson 2 をやり終えた

書いてなかった。

変数、演算子、print、findのおさらい。

  • エッジケース: たいていの場合考慮しなければならないような状況にはならないが、エラーを起こしうるケース(ex. s[0]+s[1:]
  • 部分列演算子s[0:]が空文字の場合はエラーが起こらないが、直感的にわかりづらい。
  • :は部分列演算子
  • findの第二引数は、変数(発見場所)+1みたいにすると、次のキーワードを探しにいける
  • 数を丸める方法、文字列にする前に0.5を使うとはなるほど...

Udacity: Introduction to Computer Science Lesson 1 をやり終えた

Introduction to Computer Science の Lesson 1 を全部やり終えた。結構長かった。

https://www.udacity.com/course/intro-to-computer-science–cs101www.udacity.com

普段使わない言葉が多く出てきたが、だいたいわかった。 文法を詳しくやったのは初めてで、BNFの評価の過程がまだちょっと怪しい。 「参照」という考え方を頭の隅に置いておこう。

それから文字列の操作がまだ若干詰まるが、こまめに確認すればだいたいいける。 部分列とサブ文字列というワードは初めて聞いたので、ちょっと戸惑った。 あとは配列で負の値を入れることで逆から参照できること、findメソッドの2番目の引数あたりは注意。

次は Lesson 2 をやります。

素性を知られぬままエンジニアとしてのキャリアを掴むぞ!

学生時代にはプログラミングして食っていこうと思っていた。 当時はそのくらい没頭していたのだろうけど、いまは違う仕事をしている。 実力不足で折れたのか、他に楽しいことを見つけたのかは思い出せないが、事実としていまはプログラミングから離れている。

しかし周りを見ると、プログラミングをしている人たちは楽しそうだ。 隣の芝は青い現象なのかもしれないけど、僕の目からしたらスポットライトが当たってるように輝いて見える。 その姿を見るたびに何か後ろ髪を引かれる思いがする。

「だったらやればいいじゃないか、他の人より少し遠回りしても。」と思い立ったのが昨夜だった。 キャリア的には新参者で専門の教育すら受けてないけど、作りたいものを作れるようになるくらいのレベルまでいけば十分なんじゃないか。 パラレルキャリアが勧められているご時世、情報発信し続けていたら何かしらチャンスがあるのではないか。 そうだ、完全に匿名でやってみたら、たとえ失敗してもそんなにダメージ残らないんじゃないか。 といった勢いで、ブログやらアカウントやらをだーっと取得した。

今後の予定としては、Google先生のガイドを参考にステップアップしつつ、 Udacityなどのオンラインコース電子書籍などを使って学んで行く予定。

Students - Guide to Technical Development - Google Careers

楽しんでやります!