Pythonのお勉強～入門編1～

これは私のPython学習の備忘録や整理などのためのものです。いわゆるゴミ記事。
興味のない人はブラウザバックかそっとタブを閉じましょう。
暇な人は間違いや勘違い等あればご指摘いただけると嬉しいです。

#はじめに
私は30代に突入した真面目にプログラムの勉強してこなかったしょうもないクソSEっぽい何かです。
少しの間お勉強に時間が割ける環境になったので、せっかくだから以前Udemyで購入したものを使ってちゃんとお勉強しようと思い、やってもすぐ忘れそうなので備忘録と整理も兼ねてこういうの書こうと思いました。
メモ感覚なので動画の内容を事細かに書くつもりはなく、また無駄な感想をつらつらと並べていきます。
~~初めてこういったことを書くので内容のクソさ加減はお察しください。~~

# 学習資料
Udemyのこちら↓
[Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする](https://www.udemy.com/python-beginner/)

# 環境構築
「セクション2:Python環境の設定のやり方」を元に構築
・anaconda 5.3
・PyCharm Community edition 2018

# Pythonの基本
##変数宣言
num = 1 #int型
name = 'hogesan' #string型
is_ok = True #boolean型

等々と型の宣言しなくていい。
JavaとかC#を主に触っていたので新鮮。
基本的に型の宣言はしないらしい。

type(変数)で変数の型を確認できる。

```python:実行
num = 1 # int型
name = 'hogesan' # string型
is_ok = True # boolean型

print(num, type(num))
print(name, type(name))
print(is_ok, type(is_ok))
```

```python:結果
1 <class 'int'>
hogesan <class 'str'>
True <class 'bool'>
```
<br>
~~intの変数にstringの変数を代入すると、代入された変数が代入した変数の型に変わってしまう。
気が付かずにやってしまいそうで怖い。~~
<2018.10.15 更新>
コメントでいただいて、そもそもプリミティブ型がないことを知る。
詳細はコメント参照する。

```python:実行
num = 1 #int型
name = 'hogesan' #string型

print(num, type(num))
print(name, type(name))

num = name # stringにかわっちゃう

print(num, type(num))
print(name, type(name))
```

```python:結果
1 <class 'int'>
hogesan <class 'str'>
hogesan <class 'str'>
hogesan <class 'str'>
```
<br>

型変換は下のように。Javaとかとなんとなく同じ感じ。

```python:実行
num = 1 #int型
name = '100000' #string型

print(num, type(num))
print(name, type(name))

new_num = int(name) # intに変換

print(new_num, type(new_num))
```

```python:結果
1 <class 'int'>
100000 <class 'str'>
100000 <class 'int'>
```

変数定義するときに先頭の文字が数字等だとSyntaxErrorになってしまうので注意すること。
・1num、666name 等


## printの出力
カンマ区切りで文字列を連結させる、区切り文字と終末文字の設定なんかもできる。

```python:実行
print('Hello','World!!!!!', end='^^\n')
print('Hello','World', sep='!!!!', end='^^\n')
```

```python:結果
Hello World!!!!!^^
Hello!!!!World^^
```

^^で煽っていくスタイル。

## 数値(計算系)
見覚えがないのだけメモ。
mathっていう数学関数ライブラリがある。log2とか出せるらしい。懐かしいけど数学のお勉強はサボりすぎて覚えていない。

```python:ターミナルで実行
>>> 17 / 3
5.666666666666667
>>> 17 // 3 # 小数点以下切り捨て
5
>>> 2 ** 10 # べき乗
1024
>>> pie = 3.141592
>>> round(pie, 2) # 小数点以下切り捨てる桁を指定できる
3.14
```

## 文字列
エスケープとかも大体一緒。
\nとか改行の出力の仕方が何か独特な感じがする。
「"""\
{改行して文字列入れる}\
"""」
みたいなのとか。\で最初と終わりを指定してあげないと"""の行が空白行として出力される。

```python:実行
print('C:\noge\noge2\nogeman') # \nで改行される
print(r'C:\noge\noge2\nogeman') # rを付けるとそのまま出力される
print('#######')
print("""\
hoge1
hoge2
hoge3\
""")
print('#######')
```

```python:結果
C:
oge
oge2
ogeman
C:\noge\noge2\nogeman
#######
hoge1
hoge2
hoge3
#######
```

## 文字のインデックス、スライス
word[0]とかで変数内の文字列の位置を指定できる。
word[0:2]といった形で範囲の指定もできる。
範囲外を指定したら当然エラー。
word[0] = s というようにインデックスを指定して直接書き換えることはできない。

```python:実行
word = 'hogedojo'
print(word[0])
print(word[3])
print(word[-1])
print(word[0:2])
print(word[:3])
print(word[4:])
word = word[0] + 'a' + word[2:]
print(word[:])
```

```python:結果
h
e
o
ho
hog
dojo
hagedojo
```

## 文字列のメソッド
startswithは指定した引数の値が文字列の開始位置か判定する。
findは指定した引数の値が文字列に含まれている場合、文字列内の開始位置が返ってくる。rfindというfindの末尾からバージョンもあるみたい。
他にも置換とか色々あるけど使い始めれば嫌でも覚えるだろうから全部は書かない。

```python:実行
s = 'My name is Shining Hage'
is_start = s.startswith('My')
print(is_start)
print(s.find('is'))
print(s.rfind('Shining'))
```

```python:結果
True
8
11
```

## 文字の代入
C#とかと同じようにformatを使う。
似てるようでちょっと違うから楽しい。

```python:ターミナルで実行
>>> 'a is {}'.format('hoge')
'a is hoge'
>>> 'a is {} {} {}'.format('hoge','hage','hige')
'a is hoge hage hige'
>>> 'a is {0} {1} {2}'.format('hoge','hage','hige')
'a is hoge hage hige'
>>> 'a is {2} {0} {1}'.format('hoge','hage','hige')
'a is hige hoge hage'
>>> 'a is {name} {head} {face}'.format(name='hoge', head='hage', face='hige')
'a is hoge hage hige'
>>> 'a is {face} {name} {head}'.format(name='hoge', head='hage', face='hige')
'a is hige hoge hage'
```

~~続きは近いうちに。~~
<2018.10.15 更新>
続きは[こちら](https://qiita.com/merito/items/dc47d5f0ab80736d7d69)。