この節では,情報を変数に格納することを学びます。データには二種類,文字の集まりである文字列と数値データとがあります。
message = "Hello Python world!"
print(message)
変数には値が入ります。変数の値はいつでも変更できます。
message = "Hello Python world!"
print(message)
message = "Python is my favorite language!"
print(message)
変数に関連するエラーは,どこかで遭遇することになるでしょう。次のコードを見て,なぜエラーが生じたのか考えてみましょう。
message = "Thank you for sharing Python with the world, Guido!"
print(mesage)
エラーメッセージを一通り読んでみましょう。まず,エラーはNameErrorだと分かります。次にエラーの原因となったファイルが分かります。右矢印が示すのは,該当するファイルの中のエラーが行です。続いて具体的なメッセージ"name 'mesage' is not defined"(名前 'mesage' が定義されていません)が表示されています。
すでにエラーの原因を特定できた方もいることでしょう。messageの綴りが異なっていました。"message"でも"mesage"でも構いませんが,変数の綴りを毎回一致させなくてはなりません。
これはとても重要なことです。これを利用すれば,"name"には単一の名前が含まれ,"names"にはたくさんの名前が入っているというように使い分けることが可能になります。
変数名を全て一致させれば,NameErrorを直せます。
message = "Thank you for sharing Python with the world, Guido!"
print(message)
Guido van RossumはPython言語を20年以上も前に作り出した人物で,Pythonの優しい終身の独裁者とみなされています。GuidoはPython言語のコアの大きな変更全てに今でも許可を出しています。
my_string = "This is a double-quoted string."
my_string = 'This is a single-quoted string.'
二重引用符で囲めば,文字列中に引用を含めることができます。
quote = "Linus Torvalds once said, 'Any program is only as good as it is useful.'"
first_name = 'eric'
print(first_name)
print(first_name.title())
多くの場合,データを小文字で保存し表示する際に変更すると良いようです。タイプミスが見つけやすく,'eric', 'Eric', 'ERIC'が別人とされるのを防げます。
よく使われるのは lower, title, upperです。
first_name = 'eric'
print(first_name)
print(first_name.title())
print(first_name.upper())
first_name = 'Eric'
print(first_name.lower())
変数名.アクション名()という形式をよく見かけます。括弧は空のことも値が入ることもあります。
variable_name.action()
という例ではactionはメソッドの名前です。メソッドは変数に対して何らかの作用を施すものです。'lower', 'title', 'upper'は,全てPython言語に組み込まれている関数で文字列に作用します。後で自分でメソッドを書く方法を習います。
first_name = 'ada'
last_name = 'lovelace'
full_name = first_name + ' ' + last_name
print(full_name.title())
プラスの記号は二つの文字列を一つに結合し,「連結」と呼ばれています。プラス記号は,メッセージを作るためにいくつ使っても良い。実際,多くのウェブページは大きな文字列で,文字連結を積み重ねて作られたものです。
first_name = 'ada'
last_name = 'lovelace'
full_name = first_name + ' ' + last_name
message = full_name.title() + ' ' + "was considered the world's first computer programmer."
print(message)
Ada Lovelaceが初耳なら,WikipediaやComputer History Museumに何が書かれているか読んでみると良いでしょう。彼女の人生と業績は,技術分野に関わる女性を支援するAda Initiativeに示唆を与えました。
「空白文字」という用語は,コンピュータは認識するが人間には見えないものを指します。空白文字の代表は,スペース,タブ,改行です。
スペースは,コンピュータを使ったことがあれば簡単に入力できますね。タブと改行は特別な文字の組合せで表します。
二つの文字からなる組合せ"\t"は文字列中でタブを表します。タブは文字列中のどこでも使うことができます。
print("Hello everyone!")
print("\tHello everyone!")
print("Hello \teveryone!")
組合せ"\n"は文字列中で改行を表示します。改行も文字列中のどこでも使うことができます。
print("Hello everyone!")
print("\nHello everyone!")
print("Hello \neveryone!")
print("\n\n\nHello everyone!")
テキストボックスでユーザに文字入力してもらったテキストを使うことが多くあると思います。余計な空白文字をテキストの先頭や末尾につけてしまうことはよくあります。空白文字には,スペース,タブ,改行がありましたね。
多くの場合,良い方法は先に文字列から空白文字を取り除くことです。例えば,ユーザがログインする際,'eric 'を'eric"としてシステムに存在するか確かめようとすることができます。
空白文字は,先頭,末尾,または両方から除去できます。
name = ' eric '
print(name.lstrip())
print(name.rstrip())
print(name.strip())
何が起きているか分りにくいので,次のようにすると分かりやすいかもしれません。
name = ' eric '
print('-' + name.lstrip() + '-')
print('-' + name.rstrip() + '-')
print('-' + name.strip() + '-')
print(3+2)
print(3-2)
print(3*2)
print(3/2)
print(3**2)
括弧を使えば,演算の順序を変えることができます。
standard_order = 2+3*4
print(standard_order)
my_order = (2+3)*4
print(my_order)
print(0.1+0.1)
ところが,時々小数部がとても長くなることがあります。
print(0.1+0.2)
これが起こるのは,コンピュータの内部での数の表し方が原因です。つまり,Python自体とは関係ありません。簡単に言うと,人間は10の倍数を使っているので1/10に2/10を足したものは単に3/10です。これに対し,コンピュータは2の倍数を使っています。したがって,コンピュータは0.1を2の倍数で,0.2も2の倍数で,それらの和も2の倍数で表さねばなりません。0.3は厳密に2の倍数で表すことはできないので,0.1+0.2の結果のようになったというわけです。
Pythonはこのような現象を可能な限り見せないようにします。当面気にしないでおきましょう。結果をきれいにする方法は少し後で学びますので,あわてないでください。
print(3*0.1)
Python 2とPython 3の数の取り扱い方には違う点があります。Python 2では二つの整数の商は常に整数ですが,Python 3は常に浮動小数点数を返します。整数の商が整数になるときは同じですが,答えが小数になるときは随分と違う結果になります。
# Python 2.7
print 4/2
# Python 2.7
print 3/2
# Python 3.3
print(4/2)
# Python 3.3
print(3/2)
計算結果が期待通りにならないときや,意味をなさないときは,使っているPythonのバージョンの整数の扱いが思ったものとは異なっていないか確認しましょう。
単にPython 2とPython 3を使ってみたいだけなら,pythontutor.comで簡単にできます。"Start using Online Python Tutor now"をクリックしたら,テキストボックスからサンプルコードを削除して自分のコードを書いてください。そのページには,テキストボックスの下にドロップダウンリストがあり,Pythonのバージョンが選べます。"Visualize Execution"クリックすると,コードが実行されます。次のページでは,"Forward"をクリックしてコードを1行毎に実行したり,"Last"をクリックしてプログラム全体を実行したりすることができます。
ややこしいコードを書くようになると,解きたい問題に対する答えを出すプログラムを書くことに多くの時間を費やすようになります。アイディアが出てからも,自分のコードの問題点を解決することや方法全体を再検討することにかなりの時間がかかります。
コメントには,コードではない英語などをプログラム中に書くことができます。Pythonインタプリタは,#で始まる行全てを無視します。
# This line is a comment.
print("This line is not a comment, it is code.")
Pythonコミュニティは,とても大きく多様です。Pythonは,科学,医学,ロボット工学,インターネットその他考えられる様々な分野で使われています。このような多様な人々が皆で考えて,どのようにプログラムを書くべきかという共通認識が形成されました。PythonやPythonプログラマのコミュニティを理解しようとするなら,Pythonプログラマの考え方を学ぶのが良いでしょう。
指導原理は言語に書き込まれており,簡単に読むことができます。
import this
いろいろと書かれている中から,いくつか取り上げてプログラミング初心者にどのような示唆が与えられるか考えてみましよう。
Beautiful is better than ugly.
美は醜に勝る。
Pythonプログラマは,良いコードはきれいに書けることを認識しています。問題,特に難しい問題に対して,とても洗練されている,あるいは効率的な解決法を示せば,Pythonプログラマ仲間からあなたの仕事は尊敬を受け,美しいとまで称されるでしょう。質の高い技には美が備わっているのです。
Explicit is better than implicit.
明示は暗黙に勝る。
何をしているかはっきりしている方が,理解が困難な近道よりも良いとされます。
Simple is better than complex.
Complex is better than complicated.
単純は複雑に勝る。
複雑は難解に勝る。
コードは可能な限り簡潔に,ただしときには本当に困難な問題を引き受けて簡単な解決法が見つからないことがあることも覚えておきましょう。そのような場合は複雑さを許容し,難解を避けましょう。
Readability counts.
読みやすさは重要。
面白く有用なプログラムは,今日完全に一人で全体を書いて維持されていることはほとんどありません。コードを書くときは他の人ができるだけ簡単に読めるようにし,自分でも読んで理解することが今から半年後にもできるようにしましょう。良いコメントをコードに書いておくこともこれに含まれます。
There should be one-- and preferably only one --obvious way to do it.
一つのできればただ一つの最良と思える方法があることが望ましい。
大抵問題の解決法には多数のやり方があることがプロクラミングでは普通です。でも,ほとんどの問題は定番の確立した方法があります。複雑さは必要なときにとっておいて,可能な限り最も単純な方法で解決しましょう。
Now is better than never.
とりあえずはやらないよりまし。
最初から完璧なコードを書ける人はいません。思いつきがあって,それを実装したいとき,書いてみて動かしてみましょう。リリースして他の人に使ってもらい,着実に改善していけば良いのです。
# I learned how to strip whitespace from strings.
name = '\t\teric'
print("I can strip tabs from my name: " + name.strip())
前に述べた通り,Pythonコミュニティはとても勢いがありたようです。いくつか情報源を紹介しますので,探検して見てください。
Pythonウェブサイト本家は今ところおそらくあまり面白くないかもしれませんが,すばらしい情報源であることは学ぶに連れて分かります。
Pythonカンファレンス (PyCon) はすばらしいイベントで,コミュニティは新しいプログラマは大歓迎です。このイベントは世界各地で一年中行われています。どれかに参加する機会があれば,学ぶことがたくさんあり,本当に面白い人たちに出会えることでしょう。
女性と少数派は技術畑には少ないのが現状で,プログラミングの世界もこの点について差はありません。しかし,Pythonコミュニティは,女性と少数派に対して最も親切で協力的なプログラミングコミュニティの一つです。多くのグループが女性と少数派をプログラミングを始めてもらうことを目的としていますし,Python関連のイベントで明示されている行動規範として明示されているものが多数あります。
PyLadiesはこのような団体の中で最も有名なものの一つです。とてもすばらしい情報源なので,何をしていて何を提供しているか調べてみてください。
Pythonプログラマが何人かいれば,グループを作ろうという話になるだろうと思います。Pythonユーザグループは,定期的に地域で開かれる集会です。ユーザグループの一覧を見て近くにないか探してみましょう。