C言語を理解した人へ超わかるPython講座(基礎編)
はじめに
この資料は私がC言語を学んでからPythonを勉強したという経験から書いているものです.
また分かりやすさや実際に自分が引っかかったところに重点を置いているので間違いや変な所を見つけたらコメント欄で教えてください.
目次
環境構築
pythonが実行できる環境を作るにはいくつか方法がある
- ローカルで環境構築する
- Googleのサービスを使う
- Anaconda(総合開発環境)をインストールする
- Paiza.ioを使う
個人的にはローカルで環境構築がいちばん簡単なのでオススメする.
ローカルで環境構築手順:
- pythonのインストーラーをダウンロードする
- インストーラーを実行する
1.チェックを忘れない!
- インストール後コマンドプロンプトで
python --version
と打ってエラーが出なければ大丈夫.
実行方法:
コマンドライン上で以下のコマンドを入力するとプログラムが実行される.
python 作ったファイル.py
pythonの特徴
- 明示的な型宣言がいらない
-
char a = 'b'
て書かなくていい
-
- セミコロンがいらない
- メイン関数がない(後述)
- 明示的にポインタを扱わない(内部ではポインタを使っている)
- C言語と互換性がある
- C言語の型に変換することが出来る
- コンパイルがいらない(
python 作ったファイル.py
で自動的にやってくれる) - いろいろな環境で動く
- windows,mac,android(Turmux),linux
- 実行速度が遅い
標準出力とコメントアウト
仕様:
print(変数,変数,...)
変数が数値だろうが文字列だろうが配列だろうが出力出来る
例1:
print('Hello')
----------------
Hello
例2:
print('apple')
print('orange')
print('') #改行
print('big win')
----------------
apple
orange
big win
#出力される時は改行されて出力される
例3:
s1 = 'aiueo'#文字列
s2 = ':'#文字列
s3 = 5 #数値
print(s1,s2,s3)
----------------
aiueo : 5
#出力される時は空白区切りで出力される
コメントアウトはこの2つがある
#一行のみのコメントアウト
'''
複数行のコメントアウト
'''
配列
配列には標準で用意されたリスト型,タプル型と外部ライブラリを使ったnumpy(後述する)がある.
配列はC言語と違い基本的に動的配列(配列の要素数を増やしたり,減らしたりできる)となる.
#リスト型
list1 = [10]
#配列に追加している
list1.append(40)
print(list1)
--------------------
[10, 40]
制御文
C言語だと
#include<stdio.h>
int main(void){
//for文
for(int i=0; i<5; i++){
printf("*\n")
}
//if文
a = 7;
if(a >= 8){
printf("a\n")
}else if(a < 6){
printf("b\n")
}else{
printf("c\n")
}
while(a < 10){
print("%d\n",a)
a++;
}
return 0;
}
pythonだとこうなる
※インデントを忘れないで!!!
#for文
#0 ~ 4まで5回回している
for i in range(5):
print('*')
a = 7
#if文
if(a >= 8):
print('a')
elif(a < 6):
print('b')
else:
print('c')
#while文
while(a < 10):
print(a)
a = a + 1
関数
def 関数名(引数,引数..):
...
return 返り値,返り値
pythonには明示的な型宣言を必要としないので変数名だけで関数をつくることができる.
またC言語と違い返り値をいっぱい返すことができる.
文字列
pythonは'+'の演算子で結合できる
s1 = 'spr'
s2 = 'ing'
s3 = s1 + s2
print(s3)
----------------
spring
モジュール(外部ライブラリ)
pythonが用意した標準関数ではなく外部の関数をつかうときはインポートしないといけない.
#sysという外部ライブラリ(モジュール)をインポートしてる
import sys
めちゃくちゃよく使うインポート
#numpyをnpという名前でインポートしてる
import numpy as np
#matplotlibをpltという名前でインポートしてる
import matplotlib as plt
numpy
numpyは数値計算に強いライブラリ.
配列を関数の引数に取るとき,多くの場合numpyを使う(リスト型じゃできない場合がある)
以下のように相互変換出来るので上手く活用してください.
import numpy as np
#numpyのndarray型で宣言
a1 = np.array([1,2,3])
#list型に変換
a2 = a1.tolist()
#numpyのndarray型へ変換
a3 = np.array(a2)
print(type(a1),a1)
print(type(a2),a2)
print(type(a3),a3)
------------------------
<class 'numpy.ndarray'> [1 2 3]
<class 'list'> [1, 2, 3]
<class 'numpy.ndarray'> [1 2 3]
matplotlib
グラフが出力できる
import matplotlib as plt
#0~9の配列
list1 = []
for i in range(10):
list1 = i
#9~0の配列
list2 = []
for i in range(10):
list1 = 10 - i - 1
#x軸y軸のデータを入れると出力できる
plt.scatte(list1,list2)
plt.show()
コマンドライン引数
C言語で書くとこうだったやつが
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
if(argc != 2){
printf("Usage: %s filename",argv[0]);
exit(1);
}
}
pythonだとこうなる
import sys
#args:要素の入った配列
args = sys.argv
#ac:要素数
ac = len(args)
if(ac != 2):
print('Usage:',args[0],'filename')
sys.exit()
テキストファイル
#fopen
f = open('test.txt','r')
data1 = f.read() #ファイル終端まですべて読み込んだデータを返す
f.close()
#fopen
f = open('out.txt','w')
f.white('hello')
f.close()
#with文で書き直すと簡潔になる
with open('sample.txt', 'r') as f:
print(f.read())
便利な関数・クラス
仕様:str1 = str(変数)
働き:変数を文字列に変換し,その変数に代入する
仕様:int1 = int(変数)
働き:変数を整数に変換し,その変数に代入する
仕様:sort(配列)
働き:配列をソートし,その変数に代入する
仕様:type(変数)
働き:変数の型を返す
仕様:len(変数)
働き:文字列の長さを返す
便利な表現
-
メイン関数を作る
pythonにはメイン関数という概念がないが,こんな感じで書くとメイン関数みたいにできる.
Githubなどでよく見かけるプログラムはこれで書かれていることが多い.
def main():
....
if __name__ == '__main__':
main()
- 1 ~ Nまで順番に入った配列を作る
#1 ~ Nまでのリスト
onelist = []
for i in range(N):
onelist.append(i+1)
問題
-
ランダムに「だだ」,「すか」を表示してその表示結果が「だだすかすかすかだだすかすかすかだだすかすかすか」となったら「ラブちゅーにゅー」と出力し停止するプログラムを制作せよ.
-
台形公式を用いて積分の近似値を求めよ.関数は「5sin(2x)」とし,分割数はN = 1000とする
まとめ
今回は基礎編として記事を書きました.
いずれ応用編を書こうと思っているのでしばしお待ち下さいね.
Discussion