プログラミングの基本

★=Python ◆=Ruby
#文字を出力する

★print('文字') ◆puts '文字'
＊文字列型
print(5 + 3)
＊数値型：数値はクォーテーションで囲まない。計算ができる
+,-,*,/,%

○文字列の連結
コード：print('Hello ' + 'world')
コンソール：Hello world
＊数値型を連結したい場合は、文字列に変換する → ★str（string：文字列） ◆to_s
age = 20
コード:print('年齢は' + str(age) + '歳です')
コンソール：年齢は２０歳です

○文字列を数値に変換し、計算する → ★int(integer:整数) ◆to_i
price = 200
count = '5' ← 文字列型
total_price = price * int(count)
コード:print(total_price)
コンソール：1000

#値を入力する
★input ◆gets

```script.py
name = input('文字を入力してください:')
print(name)
>_コンソール
文字を入力してください：入力した文字列
入力した文字列
```
inputで入力した値は文字列型になっているため、数値にする場合はintを使って変換する

```script.py
input_date = input('数字を入力してください:')
date = int(input_date)
print(date * 5)
>_コンソール
数字を入力してください：5
25
```

#変数
変数名は英単語を用いる。2語以上の場合はアンダーバーで区切る

○変数の定義
name（変数名） = '値'
コード：print('name') 
コンソール：値

○変数の値を更新する
name = '更新'
コード：print('name') 
コンソール：更新
number = 5
number = number + 3
コード：print(number)
コンソール：８
＊計算式を省略して書く場合
number += 3 → ８
number -= 3 → ２
number *= 3 → 15
number /= 5 → １
number %= 3 → ２ 

#条件分岐（if文）
→　◆if　elsif　end
比較演算子:==(数値が等しい),!=(数値が等しくない),>,<,>=,<=

```script.py
hour = 12
if hour == 12:
 print('お昼休みです')
elif 8 < hour < 18:
 print('勤務時間です')
else:
 print('勤務時間外です')
>_ コンソール
お昼休みです

hour = 10
if hour == 12:
 print('お昼休みです')
elif 8 < hour < 18:
 print('勤務時間です')
else:
 print('勤務時間外です')
>_ コンソール
勤務時間です

hour = 20
if hour == 12:
 print('お昼休みです')
elif 8 < hour < 18:
 print('勤務時間です')
else:
 print('勤務時間外です')
>_ コンソール
勤務時間外です
```
真偽値:　True,False

```script.py
hour = 12
print(hour == 12)
print(hour == 10)
>_ コンソール
True
False
```
　
#リスト

```script.py
#変数にリストを代入する
fruits = ['apple','peach','cherry']
print(fruits)
>_コンソール
['apple','peach','cherry']
```
インデックス番号：リストの要素は[0,1,2]

```script.py
fruits = ['apple','peach','cherry']
print(fruits[0])
>_コンソール
apple
```
リストの要素を更新する

```script.py
fruits = ['apple','peach','cherry']
fruits[1] = 'orange'
print(fruits)
>_コンソール
['apple','orange','cherry']
```
リストに要素を追加する → ★append ◆<<

```script.py
fruits = ['apple','orange','cherry']
fruits.append('peach')
print(fruits)
>_コンソール
['apple','orange','cherry','peach']
```
#キーバリューストア(KVS:Key-Value Store)
キーで値を管理する　→ ★{:,}　◆{=>,}

```script.py
fruits = {'apple':'red','orange':'yellow','peach':'pink'}
print(fruits['apple'])
>_コンソール
red
```
要素を更新する

```script.py
fruits = {'apple':'red','orange':'yellow','peach':'pink'}
fruits['apple'] = 'green'
print(fruits['apple'])
>_コンソール
green
```
要素を追加する

```script.py
fruits = {'apple':'green','orange':'yellow','peach':'pink'}
fruits['cherry'] = 'red'
print(fruits)
>_コンソール
{'apple':'green','orange':'yellow','peach':'pink','cherry':'red'}
```
#繰り返し処理
→ ◆数値.times do |ブロック変数|　end　◆配列.each do |ブロック変数| end
○for文:for 変数名 in リスト名:

```script.py
fruits = ['apple','orange','cherry','peach']
for fruit in fruits:
 print(fruit)
>_コンソール
apple
orange
cherry
peach

#KVSの場合
fruits = {'apple':'red','orange':'yellow','peach':'pink'}
for fruit_key in fruits:
 print(fruit_key + '　' + fruits[fruit_key])
>_コンソール
apple　red
orange　yellow
peach　pink
```
○while文:while 条件式:

```script.py
x = 1
while x < 10:
 print(x)
 x += 1
#無限ループに注意する

#breakで処理を終了する
x = 1
while x < 10:
 print(x)
 x += 1
 if x == 3:
  break
>_コンソール
1
2

#continueでスキップする
x = 0
while x < 10: 
 x += 1
 if x % 2 == 0:
  continue
 print(x)
>_コンソール
1
3
5
7
9
```
#関数
→ ◆def　関数名 end

```script.py
#関数の定義：def 関数名(仮引数):
def name(name_in,message):
 print('名前は' + name_in + 'です　' + message)

name('花太','皆さん、こんにちは')
<_コンソール
名前は花太です　皆さん、こんにちは

#引数の初期値を設定する
def name(name_in,message='こんにちは'):
 print('名前は' + name_in + 'です　' + message)

name('樹木')
<_コンソール
名前は樹木です　こんにちは

#戻り値:return
def name(name_in):
 if name_in == '花太':
  return True
 else:
  return False

name_in = input('名前を入れてください：')
flower = name(name_in)
print(flower)
<_コンソール
名前を入れてください：花太
True

#returnで関数内の処理を終了する
def flower(name):
 if name == '花太':
  return '花太さん、こんにちは'
 return 'あなたは花太さんではありません'
print(flower(''))
<_コンソール
あなたは花太さんではありません
```
#モジュール
別のファイルで定義した関数を使うことができる
import モジュール名
モジュール名.関数名()

```function.py
def name(name_in,message):
 print('名前は' + name_in + 'です　' + message)
```
```script.py
import function

function.name('花太','こんにちは')
<_コンソール
名前は花太です　こんにちは
```
#クラスとインスタンス
→ ◆class　クラス名 end

○クラスの定義：クラス名は大文字で始める

```script.py
#クラスの中で関数を定義する。第一引数は(self)
class Name:
#__init__メソッドを定義する
  def __init__(self,name,weight):
    self.name = name
    self.weight = weight

  def info(self):
    print(self.name + 'は' + str(self.weight) + 'Kg')

#インスタンスを生成する
name_flower = Name('花太',50)

#クラスの中で定義したメソッドを呼び出す
name_flower.info()
<_コンソール
花太は５０Kg
```

○クラスを別のファイルに読み込む

```name.py
class Name:
#__init__メソッドを定義する
  def __init__(self,name,weight):
    self.name = name
    self.weight = weight

  def info(self):
    print(self.name + 'は' + str(self.weight) + 'Kg')

```
```script.py
from name import Name

#インスタンスを生成する
name_flower = Name('花太',50)

#クラスの中で定義したメソッドを呼び出す
name_flower.info()
<_コンソール
花太は５０Kg
```

○インスタンスのリスト

```script.py
from name import Name

#インスタンスを生成する
name_flower = Name('花太',50)
name_tree = Name('樹木',40)
names = [name_flower,name_tree]

#繰り返し処理を行う
for name_kind in names:
#クラスの中で定義したメソッドを呼び出す
  name_kind.info()
<_コンソール
花太は５０Kg
樹木は40Kg
```
○クラスの継承

```child.py
from name import Name

class Child(Name):
  pass
```

```script.py
from child import Child

#インスタンスを生成する
child = Child('花太',50)
child.info()
<_コンソール
花太は５０Kg
```
*親と子で同名のメソッドがある場合は、子クラスのメソッドが優先される（上書きできる）
*super().メソッド名()とすることで、親クラスで定義されたインスタンスメソッドをそのまま利用することができる