---
# System prepended metadata

title: 第一堂社課

---

# **上課規則說明**
* **請勿使用手機**
* **電腦除幹部舉辦的活動外部不可玩遊戲或看影片:no_good:**
* **講義如有錯字請裝沒看到:poop:**

---
    

# <center> **教學長的~~廢~~話**
**首先非常感謝各位選擇資訊研討社，如上圖所示，我們下學期的專題實作非常適合做成學習歷程。**
**我們每上完一部分課程會從DanDanJudge裡面挑選一部分題目作為練習請各位完成，課程上完題目也完成後的自由時間可以自習(不違反上課規則)，或者你的實力強悍到折服教學和學術長我們就不會切您的螢幕開放給您自習:poop:。話不多說，讓我們開始我們的課程。**

---
    
# <center> Hello , World
**作為大部分程式語言學習者的第一堂課，我們要來學如何輸出，快向這個程式世界打一聲招呼吧!**
```python=
print("Hello , World")
```
**其中print為輸出，雙括號為它要輸出的內容，如果要輸出字元型態(一段話)，就必須再加上冒號，否則會被判定為變數，然後就會執行錯誤(變數未定義)，但數字又是一個例外，可以直接輸出。**
```python=
print("8")
print(8)
```
**這兩個都是可以直接執行的，不過一個是字串型式，一個是int形式。接下來讓我們看看如何輸入；**
```python=
變數 = input() 
```
**我們定義一個變數為輸入進來的值，之後就可以使用這個變數。在python中input接收到的都是字串，等等介紹資料型態的時候就會講到如何轉換。**
```py=
a,b,c=map( int , input().split() )
```
**如果要一行輸入多個變數，就會用到上面的程式碼。其中int可以換成其他的資料型態，且如果在input()裡面可以輸出要說的話，而split是他要用什麼東西分開，什麼都不打預設為空格。**
```python=
a , b , c = map(int , input().split("_")) // 要加引號不然系統會認定為變數
print(a , b , c) # 輸入 1_2_3 ， 系統輸出 1 2 3
```

:::spoiler **多筆測資的時候**
**例題：判斷閏年**
```python=
from sys import stdin
for read in stdin: 
    year=int(read) 
    if (year%4==0 and year%100) or year%400==0: print('閏年')
    else: print('平年')
```
**或者**
```python=
while True:
    try:
        y = int(input())
        if(y%4 == 0 and y%100 != 0 or y%400 == 0):
            print("閏年")
        else:
            print("平年")

    except EOFError:
        if(EOFError): break
```
:::
---
    
**題外話，如果要一次輸出多個變數；**
```python=
print(a , b , sep = " " , end = " ")
```
**其中sep為隔開a和b兩個變數的東西，我這裡設置成空格，end則為結尾輸出一個空格隔開。教學當時特別為了這個舉手問很:zap:的學長。**
    
# <center>**資料型態**
 >by學長講義改編
## int
**大家所熟知的整數型態，為英文`integer`的縮寫，當我們把小數定義為int時會無條件捨去到整數位。**

```python=
a = int(5)
b = int(3)
    
print( "a + b is" , a + b, sep=" : " )
print( "a - b is" , a - b, sep=" : " )
print( "a * b is" , a * b, sep=" : " )
print( "a / b is" , a / b, sep=" : " )
print( "a % b is" , a % b, sep=" : " )   # %  為取餘數
print( "a ** b is", a ** b, sep=" : ")   # ** 為次方
print( "a // b is", a // b, sep=" : ")   # // 為向下取整
```
## float
**float浮點數，有存整數自然有存小數型態的變數，但如果數字偏大輸出時會變成科學記號的形式。**
```python=
a = float(250)
print(a)                                 #輸出 250.0          
```

## string

- 輸入預設型態為字串
- 可用建構元`str()`宣告
- 對於**python**而言，`''` 及 `""`皆可用來表示字串
- **python**的字串支援`+`號及`*`號

```python=
s1 = "a"
s2 = "b"

s3 = s1 * 2 + s2 + '!!!'
print(s3)                                         #aab!!!
```

### 字串宣告
<div class="list">
    <div>str()</div>
    <div>"string"</div>
    <div>'string'</div>
</div>

```python=
str1 = str(你好嗎) 
str2 = "你好"
str3 = '你'
print(str1)                                            # 你好嗎
print(str2)                                            # 你好
print(str3)                                            # 你 
```

### 格式化字串
<div class="list">
<div>f"string"</div>
<div>string.format()</div>
</div>

```python=
s = f"{124}, {33}"
print(s)                                              # 124, 33
```

```python=
i = int(1)
s1 = f"{123 + 86}"
s2 = "{}, {}".format(i + 1, i + 2)
print(s2)        # 2 , 3
print(s1)        # 209
```

### 索引

- 字串提供為可透過索引值找到字元的不可修改序列
#### 用法
<div class="list">
    <div>s[i]</div>
    <div>s[i:j]</div>
    <div>s[i:j:k]</div>
</div>

```python=
s = "abcdefghijklmnopqrstuvwxyz"
#字串為0-base 也就是第一格為s[0]
s1 = s[17]
print(s1)                                             # r
s2 = s[6:13]
print(s2)                                             # ghijklm
s3 = s[0:18:3]
print(s3)                                             # adgjmp
```


### 函式

<div class="list">
<div>string.count() 可以算字串內有多少個count內的東西</div>
<div>string.eval()  用來計算字串內數學式子的值</div>
<div>string.upper() 把字串變成大寫</div>
<div>string.lower() 把字串變成小寫</div>
</div>

```python=
s = "Hello FDCSC 5th"
print(s.count(' '))                                   # 2
print(s.len())
```

```python=
s1 = "8+7-6*5/4%3**1//2"
eval(s1)                                              # 15.0
```

```python=
s1 = 'aBCd'
print(s1.upper())                                     # ABCD
print(s1.lower())                                     # abcd
```
## bool
全名為`boolean`，存取**True**, **False**，通常用來判斷。
```python=
flag = False
print(flag, not flag, sep=", ")                       # False, True
```

---

## list(array)

**主要函式**

<div class ="list">
<div>list.append()</div>
<div>list.clear()</div>
<div>list.copy()</div>
<div>list.count()</div>
<div>list.extend()</div>
<div>list.insert()</div>
<div>list.index()</div>
<div>list.pop()</div>
<div>list.remove()</div>
<div>list.reverse()</div>
<div>list.sort()</div>
</div>
    

```python=
lst = [1, 2, 3]
'''
lst = []
lst = list()
這些初始化都是可以被接受的
'''

print( lst )                                    #[1, 2, 3]

print( lst[ 0 ])                                # 1

# -------------------------- #
lst .append( 3 ) 
print( lst )                                    #[1, 2, 3, 3]

# -------------------------- #

lst .extend( [2, 4, 6])
print( lst )                                    #[1, 2, 3, 3, 2, 4, 6]
# -------------------------- #

lst .pop()
print( lst )                                    #[1, 2, 3, 3, 2, 4]
# -------------------------- #
lst .remove( 2 )                                #remove掉第一個出現的2
print( lst )                                    #[1, 3, 3, 2, 4]
# -------------------------- #
id = lst .index(4)                              # 4(位置)
print(id)
# -------------------------- #
id = 5 in lst
print(id)                                       # False
# -------------------------- #
id = lst .index(5) if 5 in lst else -1
'''
等於
id = -1 
if 5 in lst :
    id = lst .index( 5 )
'''
print(id)                                       # -1(5不在list中 -> false)
#--------------------------- #
```
**資料型態並不只有這些，如果想要了解更多可以參考以下連結：**
    

參考文章: 
https://hackmd.io/@wootu/SyGFHPjS-?type=view
http://kaiching.org/pydoing/py/python-manual.html

