[Python3] 特徴と基本構文

2020-05-15Python3CS50

CS50 の week 6 で Python 3 の基本的な書き方を学んだ。これからのために、 Python 3 の特徴と基本構文をメモしておく。これまでの講義で使っていた C 言語の構文との違いを比較しながら。ここでは条件文やループとかの書き方をまとめた。

特徴

コンパイルが必要ない ( インタプリタ言語 )
ファイルは .py ( パイと読む ) ファイル
実行方法は python hoge.py

<書き方全体>

セミコロンがいらない
 → インデントが代わりとなり、ブロックの始まりと終りを表現する

インデントは半角スペース 4 つ、またはタブ
 → 両方使えるけど、半角スペースとタブが混ざるとエラーとなる

if とか ループに {} がいらない

データタイプ

boolTrue / False ( 頭文字が大文字 )
float浮動小数点
int整数 ( integer )
str文字列 ( string )
range数列 ( sequence of numbers )
list
C でやった linked list 的なやつで、要素の追加や削除ができる ( これを mutable という ) シーケンス
順序が保証され、重複した値を登録できる
tuple
後から要素の追加、変更、削除ができない ( これを immutable という ) シーケンス
dict C でやったハッシュテーブル的なやつで、キーバリュー型の集合
set重複が許されない値の集合

基本構文

プリント

まず C の例

int x = 10;
printf("x is %i\n", x);

python 3

x = 10

# 1
print("x is " + x)

# 2
print("hello,", answer)

# 3
print(f"hello, {answer}")

print と書く
引数を複数入れることができる
コメントは #

1 の例: 連結に + を使う
2 の例: 連結に , を使うと、デフォルトでは半角スペースを自動でいれてくれる
3 の例: format strings が使える
    最初に f を書くと、 {} の中の引数を展開してくれる
    ※ f をつけないと、hello,  {answer} と表示される

format strings は引数の展開だけでなく、式を入れることもできるし、書式指定とかいろいろできる

print(f"You are {age * 365} days old.")

変数が先にくるときは、途中に f を入れる

print(name, f"born {val}", sep=" : ")

デフォルトで改行してくれる
なぜならデフォルトではこうなっているから

print("#", end="\n")

end= のとこはオーバーライドすることができる
なので、改行したくない場合にはこう書く

print("#", end="")

# こう書くこともできる
print("#", end=".")
# 出力結果
# #.

, の連結は sep= でオーバライドできる

print("AAA", "BBB", sep=" | ")
# 出力結果
# AAA | BBB

“????" と表示したいとき、掛け算で書くことができる

print("?" * 4)

変数

C の例

int x = 10;

Python ではデータ型を指定しない

x = 10

文字列には、ダブルクォーテーションとシングルクォーテーションの両方が使える
char 型がない ( から両方使える )

str = "ABC"
# または
str = 'ABC'

条件文

() がいらない、代わりにコロン ( : ) をつける
 → if 文が長くて改行したいときは () で囲んでもいい
 → 改行にはバックスラッシュ ( \ ) を使ってもいい
else ifelif になる
&&and|| or となる
x != ynot x == y と書ける
14 < x <= 50 と条件を繋げて書ける

Python 3

if x < 13 or y == 10:
    # code block 1
elif x > 50 and not y == 0:
    # code block 2
elif (14 < x <= 50):
    # code block 3
else:
    # code block 4

改行の例

if (x < 13 or y == 10
or not z == 0):
    # code block
# または
if x < 13 or y == 10 \
or not z == 0:
    # code block

C の例

if ( x < 13 || y == 10)
{
    // code block 1
}
else if ( x > 50 && y != 0)
{
    //  code block 2
}
else if (14 < x && x <= 50)
{
    //  code block 3
}
else
{
    //  code block 4
}

論理演算子

if 文で条件を複数書くときとか、ブール演算に使う

論理積(かつ): and
論理和(または): or
否定(ではない): not

比較演算子

結果は TrueFalse で返ってくる

x == yx と y が等しい
x != yx と y が等しくない
x > yx は y よりも大きい
x < yx は y よりも小さい
x >= yx は y と等しいか大きい
x <= yx は y と等しいか小さい
x in yx が y の中に存在する
x not in yx が y の中に存在しない

三項演算子

hoge = 条件式が True のときに返す値、または実行される式 if 条件式 else 条件式が False のときに返す値、または実行される式

var = 'A'
alpha = True if var.isalpha() else False

C の例

char var = 'A';
bool alpha = isalpha(var) ? true : false;

ループ

() がいらない代わりにコロン ( : ) をつける
++ は存在しないので、 += 1 と書く
do-while はない

while

Python 3 の例

cnt = 0
while cnt < 100:
    print(cnt)
    cnt += 1

C の例

int cnt = 0;
while (cnt < 100)
{
    printf("%i\n", cnt);
    cnt++;
}

for

C の例

for (int i = 0; i < 100; i++)
{
    printf("%i\n", i);
}

Python 3 の例

for i in range(100):
    print(i)

in range(xx) と書いて範囲を指定できる
in [0,1,2] と書くこともできる

2 ずつカウントアップしたいとき

C の例

for (int i = 0; i < 100; i += 2)
{
    printf("%i\n", i);
}

Python 3

for i in range(0, 100, 2)
    print(i)

range(開始値, 終値, スキップしたい値) と書ける

Posted by Agopeanuts