iT邦幫忙

2024 iThome 鐵人賽

DAY 2
1

**第2天
今天也繼續加油、繼續刷刷刷~
————————————我是可愛的題目分隔線————————————

題目1:說明Python的特色及優點

Python特色:它是一種解釋型語言,意味著它的程式碼在執行時由解釋器「逐行」執行,而非在執行前編譯成機器碼,這會使開發過程更靈活及高效率。

Python優點:

  1. 好學習好用:因為語法簡潔明瞭,適合初學者
  2. 豐富的資源庫以及框架:NumPy、Pandas (數據處理)、Django等,這些都有助於開發者可以快速開發應用程式
  3. 強大的社群:擁有活躍且支持立強的開發者社群,提供大量的學習資源和技術支持。例如:Stack Overflow、Reddit和Github上有大量的Python開發者分享他們的經驗和解決方案。
  4. 適用範圍廣:Python可用於網頁開發、數據分析、人工智慧、機器學習、自動化腳本等多種領域。例如:Google使用Python進行網頁索引,Netflix利用Python分析用戶數據來推薦內容NASA 也使用 Python 來進行科學計算。

**額外補充Pythonista **
Pythonista是一款專門為iOS設備(例如:iPhone和iPad)設計的應用程式,它可以在iOS設備上執行:

  1. 編寫程式
  2. 執行程式
  3. 進行測試並調整
  4. 互動(像是:訪問相機、發送通知等等)

第1題結束。

---距離集滿300題還剩289題---
————————————我是可愛的題目分隔線————————————

題目2:分別說明CSRF跟CORS的意思

CSRF(跨站請求偽造):
CSRF是一種網路攻擊方式,攻擊者利用受害者已經登入的身份,偷偷的讓受害者在不知情的情況下做一些不想做操作。
舉個例子:
假設我在我手機已經登入了一個銀行網站,然後我的信箱有收到駭客設計過的一個網址,長得很像我已經都入過的銀行發的通知信,如果我好奇點進去的話,就有可能讓駭客盜取我銀行帳戶裡面的錢。

CORS(跨來圓茲圓共享):
CORS是一個網頁安全機制,讓瀏覽器能夠控制哪些網路資源可以被接收。
舉個例子:
假設有一個網頁在 example.com,我想要從 api.anotherwebsite.com 獲取資料,但出於安全考量,瀏覽器通常會阻止這種跨來源的請求。
為了解決這個問題,CORS 機制允許 aapi.anotherwebsite.com 在回應的標頭中設置一些特殊的參數,告訴瀏覽器這個請求是被允許的。

第2題結束。

---距離集滿300題還剩288題---
————————————我是可愛的題目分隔線————————————

題目3:什麼是Pythonic

Pythonic指在Python語言以自然、優雅符合Python設計哲學的方式寫程式碼。
例如:使用列表式生成式(list comprehensions),而非循環創建列表。

另一個問題來了,什麼叫:列表式生成式(list comprehensions)、循環創建列表(loop to create a list)?

循環創建列表是指像下列程式碼,傳統程式碼寫法會依照一段文字/一個想法/邏輯/算法(想不到有什麼可以形容,只好全寫上來了XD),來一行一行轉寫程式碼:
squares = []
for i in range(1, 11):
squares.append(i ** 2)
白話文:
squares = [] 創建一個名為squares的空列表,這個空列表是用來存放後面要計算的平方數
for i in range(1, 11): 使用for循環,從1到10->>(因為range函數的使用範圍是不包含結尾值(這邊的的結尾值是11,所以不包含在裡面))
squares.append(i ** 2)就開始計算從1到10每個數字的平方,然後計算完成後就放到最初的squares = [] 這個陣列裡面

接著列表式生成式則是把循環創建列表精簡化~
延續上面的例子來說,程式碼就會長程下面這樣:

square = [i**2 for i in range(1, 11)]
白話文:squares的空陣列中要塞入範圍從1~10的變數i的平方和

對,翻成白話文也是直接一行解決~(撒花!
那我來統整一下列表式生成式跟循環創建列表的對比/差別在於:

  1. 列表式生成式比循環創建列表的「可讀性」更高,更加淺顯易懂。看我翻的白話文就可以很明白了吧(自己說^ ^
  2. 列表式生成式比循環創建列表更加「簡潔」。有沒有發現下面那個範例有少一個append()語法?就不用另外再加一個「添加」的動作了,square = [i**2 for i in range(1, 11)]直接幫你「自動塞入」

好了,回歸正題~什麼是Pythonic?
答:Pythonic即Python中使用列表式生成式的方式寫程式碼的一種方法/程式碼名稱。

第3題結束。

---距離集滿300題還剩287題---
————————————我是可愛的題目分隔線————————————

題目4:什麼是文字碼語言(Scripting language), Python是文字碼語言嗎?

首先,Python是文字碼語言。
那什麼是文字碼語言呢,它是用來編寫腳本的程式語言,通常被用來自動化某些任務,或擴展其他軟體功能(像是處理文本或管理系統)。

主要特點:

  1. 易於學習和使用:文字馬語言通常語法較為簡單,讓程序員可以快速上手,寫出可讀性較高的程式碼
  2. 解釋執行:文字碼語言不需要編譯,而是由解釋器(interpreter)直接執行代碼。這意味著工程師可以直接運行代碼,而不需要額外的編譯步驟。
  3. 適合自動化:這類語言特別是用來編寫腳本,處理系統管理、自動化任務、數據處理等。
  4. 動態語言:文字碼語言通常是動態語言,這代表說工程師在運行程式碼時,可以很自己靈活的創建變數/量,而不需要事先定義好他們的類型。

這邊再補充一下,常見的文字碼語言有哪些:

  1. Python:廣泛應用在網頁開發、數據分析、自動化等
  2. JavaScript:主要用於網頁前端的互動和動態效果
  3. Ruby:主要用於網頁開發,特別是Ruby on Rails
  4. Bash:用於Unix/Linux系統的命令腳本,自動化操作和系統管理

第4題結束。

---距離集滿300題還剩286題---
————————————我是可愛的題目分隔線————————————

題目5:什麼是靜態語言跟動態語言?

靜態語言(Static Typing):

  1. 變數類型在「工程師編譯」時確定:變數的數據類型(例如整數、字符、字串等)在編譯的時候就已經確定/固定好,意思就是工程師在寫程式碼的時候,就要非常明確指定好變數的類型。
  2. 可以提前檢查錯誤:因為變數的類型在編譯的時候/階段,就已經確定好,所以編譯器可以提前檢查類型有沒有錯,如果程式碼中有類型不匹配的問題,編譯器會在編譯十題是錯誤。
  3. 常見的語言:C、C++、Java、Swift ->>>這些語言會要求工程師在使用變數之前先定義好該變數的類型。

舉例來說(用Java):
int age =25;
//變數age的類型是int(整數),這在編譯時就已經確定了。

動態語言(Dynamic Typing):

  1. 變量類型在「程式碼運行」時確定:在動態語言中,變數的數據類型是在運行時才確定的。工程師不用在編寫代碼時指定變數的類型,這樣的好處是可以更加靈活的處理數據。
  2. 運行時檢查錯誤:因為變數的類型是在程式碼運行時確定的,所以變數的類型如果出錯的話,會在程式碼運行時出現,不會再工程師編寫時出現錯誤。
  3. 常見的語言:Python、JavaScript、Ruby ->>>這些語言允許工程師在寫程式碼時,賦予變數不同的數據類型。

舉例來說(用Python):
age =25
#變數age可以是整數,也可以轉換成字串、列表等其他類型。

第5題結束。

---距離集滿300題還剩285題---
————————————我是可愛的題目分隔線————————————

題目6:.py檔及.pyc檔的差異

  • .py檔:
  1. 是Python的原始檔案名,用來撰寫Python語言的檔案
  2. 開發工程師可以直接「編輯」和「查看」這個檔案
  • .pyc檔:
  1. 是Python的編譯檔,用來把.py檔內的程式碼編譯成字節碼(bytecode),字節碼(bytecode)才是讓電腦看得懂的語言。
  2. 轉譯完成的字節碼(bytecode),會儲存在.py檔裡面,這樣才能加快後續的執行速度(所以處理大型數據資料庫等,會速度很快)。
  3. 通常儲存在__pycache__資料夾裡面

第6題結束。

---距離集滿300題還剩284題---
————————————我是可愛的題目分隔線————————————

題目7:Python裡註解的使用方式,以及Python裡//的用法

Python裡註解的使用方式:

  1. 單行註解:# 快捷鍵:command + / (因為我是用IOS系統)
  2. 多行註解:
    2-1 ”””
    這是一個多行註解
    可以寫很多文字內容
    用雙引號寫
    “””
    2-2 ‘’’
    這是一個多行註解
    可以寫很多文字內容
    用單引號寫
    ‘’’

Python裡//的用法:用來進行「整數除法」的運算符號,不會有小數點:
舉個例子:
a = 10
b = 3
result = a// b
print(result) #印出result 會等於3

第7題結束。

---距離集滿300題還剩283題---
————————————我是可愛的題目分隔線————————————

題目8:Python內建的容器資料型態有哪些

首先容器資料型態的意思是,它是被用來存放一組資料的結構。

那Python內建的容器資料型態有以下幾種:

  1. list(列表 []):
    屬於可以變動的有順序的序列,且也可以儲存多種資料型態
    舉個例子:
    my_list = [1, 2, 3, "apple"]
    my_list.append("banana") # 新增一個項目
    my_list[0] = 10 # 修改第一個項目

  2. tuple(元組 ()):
    屬於不可以變動的有順序的序列,建立後不能修改原本的內容
    舉個例子:
    my_tuple = (1, 2, 3, "apple") # 元組內容無法修改

  3. set(集/組合):
    沒有順序的東西集中在一起,只允許儲存不重複的的東西,難這些東西的內容是可以隨意修改(新增或刪除)的
    舉個例子:
    my_set = {1, 2, 3}
    my_set.add(4) # 新增一個項目
    my_set.remove(2) # 刪除一個項目
    print(my_set)完後印出以下圖示:
    https://ithelp.ithome.com.tw/upload/images/20240916/201683711PfdpBgm0M.png

  4. dict(字典):除了是容器資料型態外,也是映射(mapping)資料型態
    它是一種集合「關鍵字」和對應「該關鍵字的值」的容器,
    「關鍵字」和對應「該關鍵字的值」可以隨時新增、修改或刪除
    舉個例子:
    my_dict = {"name": "Alice", "age": 25}
    my_dict["age"] = 26 # 修改年齡
    my_dict["city"] = "New York" # 新增一個鍵值對
    print(my_dict)完後印出以下圖示:
    https://ithelp.ithome.com.tw/upload/images/20240916/20168371sCVpCoP0QP.png

另外Python內建的序列資料型態有以下幾種:

  1. str(字串):
    不可以變動的有順序字串序列,用來儲存文字檔
    舉個例子:
    my_string = "hello"

  2. range(範圍):
    用來生成數字序列的不可變類型,常被用在某某循環中
    舉個例子:
    my_range = range(5) # 生成從 0 到 4 的數字序列 ->>>5是不包含在內喔,
    白話文:5是這個範圍的「邊界」不算在範圍「內」,所以只算0~4的值。

  3. list:除了是容器資料型態外,也是序列資料型態

  4. tuple:除了是容器資料型態外,也是序列資料型態

總結

  • 容器資料型態:list, tuple, set, dict
  • 序列資料型態:list, tuple, str, range
  • 映射資料型態:dict

第8題結束。

---距離集滿300題還剩282題---
————————————我是可愛的題目分隔線————————————

題目9:Python提供哪些內建可變(mutable)和不可變(immutable)的資料型態

內建可變(mutable)的資料型態:
這些資料型態在創建後可以修改它們的內容:
1. list
2. dict
3. set
4. bytearray(位元組陣列):可以修改內部的位元組數據
舉個例子:
my_bytearray = bytearray(b"hello")
my_bytearray[0] = 72 # 修改第一個位元組
print(my_bytearray)完後印出以下圖示:小寫的h變成大寫的H
https://ithelp.ithome.com.tw/upload/images/20240916/20168371SED3ToBiLw.png

不可變(immutable)的資料型態:
這些資料型態在創建後「不」可以修改它們的內容:
1. int:整數
2. float:浮點數(小數點)
3. complex:複數
4. str:字串
5. tuple:元組
6. frozenset:凍結的集合
my_frozenset = frozenset([1, 2, 3])
7. bytes:位元組
my_bytes = b"hello" # 不能修改 my_bytes 內的內容

總結

  • 可變(Mutable):list, dict, set, bytearray
  • 不可變(Immutable):int, float, complex, str, tuple, frozenset, bytes

第9題結束。

---距離集滿300題還剩281題---
————————————我是可愛的題目分隔線————————————

題目10:串列(list)和元組(tuple)的區別

串列(list):

  1. 像一個可變的購物袋:你可以隨時往裡面加東西、拿出來東西或是改變裡面的東西
  2. 靈活:適合需要經常修改內容的情況
  3. 語法:用方括號 [] 來表示
    舉個例子:
    my_list = [1,2,3, "apple"]
    my_list.append("banana") # 加東西
    my_list[0] = 10 # 改變第一個東西
    my_list.remove(2) # 拿走一個東西
    print(my_list)

印出的結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20240916/201683715mizVwb3dt.png

假設你有一份購物清單,有時候你會增加或刪減物品,這時候用串列最合適:

shopping_list = ["milk", "bread", "eggs"]
shopping_list.append("butter") # 加入 butter
shopping_list.remove("bread") # 拿掉 bread
print(shopping_list)

印出的結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20240916/20168371snHHbC0Qqi.png

元組(tuple):

  1. 像一個不可變的禮盒:一旦裝好東西後,就不能再改變裡面的內容了
  2. 穩定:適合不需要改變內容的情況,因為這樣更安全和高效
  3. 語法:用圓括號 () 來表示
    舉個例子:
    my_tuple = (1, 2, 3, "apple”) # 無法加東西、改變或拿走裡面的東西
    print(my_tuple )

印出的結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20240916/201683713VOfiYf5lL.png

如果你有一組固定的座標,不會改變的,這時候用元組:
coordinates = (34.0522, -118.2437) # 洛杉磯的經緯度 # 這些座標是不會改變的

第10題結束。

---距離集滿300題還剩280題---
————————————我是可愛的題目分隔線————————————


上一篇
刷題第一天
下一篇
第三天刷題
系列文
Python 新手入門:挑戰30天刷完300題14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言