Python boot camp by Dr.Angela day1-2

UdemyでDr.Angelaの講座を購入したので、100day trainingにtry。
Pythonの基礎からhigh intermidiateまでカバーしていて、講座の中で出される問題の難易度は適切なので挫折なく取り組めるものになっていると思います。

#print()
pythonではシングルクォート「’」とダブルクォート「”」の違いは特にないが、クォートを入れ子にする場合は、異なるクォートを使用するべき。

```python
print("Hello")
print('Day1 - string manipulation')
#出力結果
Hello
Day1 - string manipulation

print("Hello "+" world !!")
print("Hello '+' world !!")
#出力結果
Hello  world !!
Hello + world !!
```
上記のように"+",'+'で二重構造の場合、異なるクォーテーションを使用しないと文字列として認識されるか記号で認識されるかで出力内容が異なるので注意。

#input()
print()との違いはプロンプトが返ってこないこと
入力が完了することでコードが完了する関数

```python
print("Hello "+ input("What is your name?"))
```

#len()
length(長さ)の出力ができる。


```python
print(len("Tomorrow is rather than today."))
#出力結果
30

print(len(1234))
#出力結果
Traceback (most recent call last)
...
```
スペースも含めたクォート” ”内のビット数をカウントしてくれる。
int型は読み込まず、string型のみカウントする。

##Mission>>> 2つの変数を入れ替えるコード

```python
a = input("A: ")
b = input("B: ")
```
とするとき、

```python
#入力
a=b
b=a
#出力
a:0
b:1
a:1
b:1
```
上記だとa=bになった後に、またb=aでbは1の値となり、a,bがともにaの値になってしまう。
そこでもう1つ変数cを加えることでaとbという箱の外に一旦放り出して再定義することが可能となる。

```python
#入力
c=a
a=b
b=C 
#出力結果
a:0
b:1
a:1
b:0
```
#データ型
初学者が抑えるべき型は4つ
String:文字列
Integer:数値
Float:小数点
Boolean:真偽値　 → 条件式結果がTrueなら処理実施 / Falseなら処理実施しない

##String
「str」と書かれることが多い。
クォートで囲うことでstringとみなされ単に文字列同士の連結、クォートを用いないとintとみなされて計算される。

```python
print("100"+"400")
print(100+400)
#出力結果
100400
500
```
・[]:bracet(ブラケット)
index(位置)を示し、プログラミングでは常に0からカウントする。

```python
print("ABCDE"[0])
print("ABCDE"[1])
print("ABCDE"[5])
#出力結果
A
B
Trackback (most recent call last):
....
```
ABCDEは0,1,2,3,4のindexを持ち、[5]は存在しないため、L3のみエラーとなる。
　　　 
##Integer
「int」と書かれることが多い。
pythonでは「,」は区切りスペースとみなされ、「_」は完全無視される。
連続する数字を開発者が目視で認識しやすくするために用いられることが多い。

```python
print(123+345)
print(123,234,456_567_1230)
#出力結果
468
123 345 4565671230
```
##Float
「FloatingPointNumber」=浮動小数点
仮数・基数・指数を用いて、誤差が出る代わりに非常に広範囲の数字を扱うことを可能とするもの。
詳しくはぴよさんのサイトが分かりやすいです →https://wa3.i-3-i.info/word14959.html

##Boolean
True/Falseのみ表示される。なんのクォートもいらない。

```python
bool=True
if bool1:
  print("OK")
else:
  print("NG")
#出力結果
OK
```
L1で常にboolがTrueであることを定義しているのでOKが出力される。

#type()
データ型を渡してくれる。初学者はよくお世話になると思う。
型の違うもの同士はひと手間加えないと連結できないので注意。

```python
num_char=len(input("Who are you? >> "))
print(type(num_char))
print("Your name has "+ num_char +"characters.")
#出力結果
Who are you? >> Knowmen
<class 'int>'
Traceback
...
```
num_charにlen()をネストしたが、lenはint型のみ扱うのでstring型のnum_charは連結できない。
解決策>>> int型をstr型に全て変換してから連結してprintする

```python
num_char=len(input("Who are you? >> "))
new_num_char=str(num_char)
print("Your name has "+ new_num_char + "characters.")
#出力結果
Who are you? >> Knowmen
Your name has 6 characters.
```
・float

```python
print(70+float("3.14159"))
print(70+3.14159)
print(str(70)+str(3.14159))
#出力結果
73.14159
73.14159
703.14159
```
int型の連結ではfloat使っても使わなくてもエラー起きず、計算可能。
str型の連結では70という文字列+3.14159という文字列の連結になるので計算されない。

##Mission>> 2桁の数字を入力し、各位の和を取ったらいくつになるか？

```python
two_dnumber = input("Input a two digit number: ")

print(type(two_dnumber))
a = int(two_dnumber[0])
b = int(two_dnumber[1])
ans=a+b
print(ans)
#出力結果
Type a two dnumber: 88
<class 'str'>
16
```
なんか色変わっちゃってますが、気にせず行きましょう。
L2でtwo_dnumberの型をtype()で確認すると、'str'なので計算するにあたってintに変換する必要がありましたね。

##Mission>> BMI算出プログラム
頻出の問題です。ポイントは小数点が入る可能性を考慮し、intではなくfloatを使用すること。

```python
#example1
height = input("input your height(m): ")
weight = input("input your weight(kg): ")
bmi = float(weight)/float(height)**2
print(bmi)

#example2
height = float(input("input your height(m): ")
weight = float(input("input your weight(kg): ")
bmi = weight/(height)**2
print(bmi)
```
あとからfloat型変換するパターンと、入力時点でfloat変換してしまうパターン

・循環小数
円周率のように割り切れず永遠に続く小数のこと。
普通にprint()すると、デフォルトの桁数まで出力するようになっているが、round()を用いると、四捨五入してくれる。

```python
print(8/3)
#int型
print(round(8/3))
#float型 / 第二引数なしで小数第0位までの表記 (=整数int表記)
print(round(8/3,2))
#float型 / 第二引数に「2」指定で小数第2位までの表記
print(round(2.666666666,2))
#float型 / 第一引数に循環小数を直接入れても計算式を入れてもround関数は有効

#出力結果
2.666666666666666666
3
2.67
2.67
```
・四則計算豆知識
四則計算は普通に前から順に行われる。以下はプログラマー御用達の書き方。

```python
score += 2
→ score = score+2
score  /=2
→ score = score/2
```

##Mission>> 一気に型変換したい！
いちいちprintのたびに型変換を文中に書くのは大変！ということで・・・
解決策>> f-stringという技を使う
f直後にはスペース開けずに続けてコードする。string型へ変換したい他の型を{}で括り、一気にstring型とすることが可能。

```python
name = Knowmen
height = 1.8
weight = 42
#f-string
print(f"Your name is {Knowmen}, Your height is {height}, you are weight is {weight}")
```
##Mission>> 自分の余命を年,週,日で算出するプログラム
この問題のキモはf-string。

```python
age = input("What is your current age? >> ")
new_age = int(age)
rd =365*(90-new_age)
rw =rd//7
ry =rw//4
print(f"You have {rd} days {rw} weeks {ry} months")
```

##Mission>> 割り勘プログラム
これも頻出問題の簡単ver.です。
「総額($)には小数点が入る可能性がある」
「1人当たりの割り勘額は小数第三位まで算出する」
「f-stringを使用する」
上記条件でKnowmenが書いたコードがこちら。No chaetingで完璧に書けたので達成感があります。

```python
b=float(input("What was the total bill?: "))
p=int(input("What percentage tip would you like to give? Select from [10/12/15]: "))
n= int(input("How many people split the bill?: ")
print(f"Each person should pay: {round(b*(1+p/100)/n,3}")
#出力結果
What was the total bill?: 124.56
What percentage tip would you like to give? Select from [10/20/25]: 12
How many people split the bill?: 7
Each person should pay: 19.93
```
[参考文献]
Udemy "python boot camp" (Dr.Angela Yu)
https://www.udemy.com/course/100-days-of-code/
piyo