顯示具有 Python入門 標籤的文章。 顯示所有文章
顯示具有 Python入門 標籤的文章。 顯示所有文章

2024年4月13日 星期六

Python 基礎:變數與基本運算

之前介紹了將 Python 程式製作為執行檔,

今天則是要來介紹關於變數的概念與基本的運算,

給剛入門的朋友一些基本的概念

Python 基礎:變數與基本運算

變數是一個暫存資料的地方,

Python 屬於一種動態語言,

跟 C/C++ 語言不同的是變數不需要經過事先宣告,


在C語言這類的靜態語言中,

變數宣告之後編譯器就會在記憶體中給予一個空間,

不同的變數通常都擁有不同的記憶體位址來儲存



但在 Python 這類的動態語言中,

變數相當於一個標誌,

這個標誌指向到一個記憶體位址內容為 10 ,

若另外有一個變數內容也為 10,

此時可看到這兩個變數指向的都是同個記憶體位址

 
而變數命名的方式其實有許多種方式,

常見的有駝峰式命名法、蛇形命名法、匈牙利命名法、....等,

採用何種命名法其實都可以,

主要的目的通常為了程式的可讀性,

讓其他維護的工程師能夠一眼就認出這個變數的用途或者功用為佳

在 Python 常見的命名法為蛇形命名法 (snake_case),

變數通常為英文字母開頭,

若要使用多個單字來增加變數的可讀性則以底線取代空格連接,

雖說 Python 支援使用者以中文做為變數名稱,

但一般在程式設計中卻不會使用中文,

除了中文變數名稱需要切換輸入法來撰寫程式碼之外,

中文英文之間其實還有編碼上的差異,

若成員中有其他語系的設計者對其會是一種困擾,


四則運算即是指加( + )、減 ( - )、乘 ( * )、除 ( / ) ,

當然還有一些延伸的運算像是餘數 ( % ) 以及整除 ( // )等,

或是次方 ( ** )、立方 ( *** ) 這些在運算都是很常見的運算符號,

這些運算符號其實是有優先順序的,

順序優先次序分別為:

1. 次方 : 像是立方、平方等
2. 乘法、除法、求餘( % )、求整除 ( // )
3. 加法、減法

基本上跟學校所學得先乘除後加減的概念符合,

若是程式設計的時候不再需要使用這個變數,

就能夠將其徹底從記憶體中移除來節省空間,

在 Python 中使用:

del 變數名稱

就能夠將這個變數刪除,

以上就是今天要帶大家來看的

Python 基礎:變數與基本運算

當然這僅是一個基本的概念,

給予非本科系出身或者剛入門的程式設計者做一個參考,

還沒有訂閱的朋友也別忘記在影片的右下角點選訂閱來支持本站的 YouTube頻道


2022年3月18日 星期五

Python 內建函式 exec與 eval的差異

之前介紹過 Python 的函式入門,

那屬於使用者自訂的函式,

其實 Python 內建有許多函式可用,

這就是今天要來談的主題

Python 內建函式 exec與 eval的差異

exec 與 eval 兩者非常的相似,

用法上也很雷同,

其後可以帶兩個以字典表示的廣域變數與區域變數作為參數

範例程式碼如下:


    """eval 與 exec"""
    a = 1
    b = 2

    exec('print(int(a)+int(b))', {'a': '2', 'b': '3'})
    print(a, b)
    eval('print(int(a)+int(b))', {'a': '4', 'b': '5'})
    print(a, b)

    print(exec(input('please enter :')))
    print(eval(input('please enter :')))


使用 help() 分別查詢 exec與eval 兩者,

說明上大同小異


上面的範例程式執行的結果可以發現,

同樣執行 a+b 都不影響原本 a與b 的初始值

a = 1
b = 2

那為何要多此一舉,

不直接寫 Python 的程式碼呢?

這是因為 exec與eval 兩者,

能夠以動態方式執行使用者自訂的程式碼,

若將範例程式碼寫成文字檔丟給 Python 程式讀取,

不就能達到動態修改並執行程式碼了,

不過相對的也造成了部分的安全性問題。


不過在範例程式中讓使用者輸入執行的運算時,

可以看到 exec 的執行結果為 None ,

這是由於 exec 並不回傳執行的結果,

而 eval 能將運算結果傳回,

這就是兩者很顯著的差異,

以上就是今天要介紹的主題

Python 內建函式 exec與 eval的差異




2021年7月16日 星期五

Python 基礎:認識關係運算子與邏輯運算子

在程式設計的基礎中,

除了資料型態( data type )很重要以外,

運算與關係的闡釋也是相當常用的,

今天就來介紹下:

Python 基礎:認識關係運算子與邏輯運算子

關係運算子

簡單的講就是用來比較兩者之間大小關係的運算單元,

也就是大於( > )、小於 ( < )、等於 ( == )、大於等於 ( >= )、小於等於 ( <= )、不等於( != ) 

通常用在比較兩者的大小關係。



一般來說會有兩個資料來做比較,

Python 比較特殊,

能夠判別多項拼接起來的關係運算式,

舉例來說:


a = 10
b = 20
c = 30

print(a > b)
print(b < c)
print(a < b < c)
print(a > b > c)


執行的結果為

  • False
  • True
  • True
  • False

最後的兩種關係運算式在 C/C++ 中,

是不允許這樣使用的。


邏輯運算子

邏輯運算子指的是 and 、or、not,

主要是用來條件判別,

使用 and 時,

前後兩個條件必須都成立才為 true,

只要有一個條件不成立就為 false;

而 or 則是前後兩個條件只要有一個成立就為 true,

兩個條件都不成立則為 false;

not 表示反義,

只要後面接的條件成立就為 false,

不成立就為 true。

從範例來看會比較清楚些:

a = 10
b = 20
c = 30

print((a > b) and (b < c))
print(not (a > b) and (b < c))
print((a < b < c) or (a > b > c))

可以看到結果為:
  • False
  • True
  • True
如果條件沒有額外括號的話,

跟先乘除、後加減一樣,

邏輯運算子也有優先順序的

式子裡先判別 not ,再執行 and 最後才運算 or 

同樣也上面範例來看:

print(not a > b and b > c or a > c)
這個關係式的結果會是:
  • false
以上就是今天要介紹的主題:

Python 基礎:認識關係運算子與邏輯運算子


2021年7月6日 星期二

Python 基礎:認識編碼與字元集

眾所皆知電腦只認得數字的 0 與 1 ,

一般使用的文字都需要經過編碼的動作將其存成數字,

最後再傳給電腦計算處理,

而編碼的規則就是依照字元集來進行,

今天就簡單介紹下

Python 基礎:認識編碼與字元集


首先認識下幾個常見的編碼

ASCII 碼

電腦最小的儲存單位是 bit (位元),

將一個字元以 8個位元由 0 與 1 組成的數字表示,

就成了所謂的 ASCII 表。

在 Python 中,

使用

chr(x)

來輸出一個 ASCII 或 Unicode 字元。

例如: ASCII 表的 97 代表著英文字母: a

Unicode 碼

ASCII 碼對於英文語系的國家在使用上是不會有多大問題的,

不過地球上有許多不同的語言,

而 ASCII 能容納的字元有限,

為了能讓地球上所有的電腦能夠溝通,

所以有 Unicode碼的設計。

在 Python 中,

使用 

ord(x)

來輸出一個 Unicode 的字元。

utf-8 碼

utf-8 是針對 Unicode字元集的可變長度編碼的方式,

在網際網路上使用特別廣泛,

它使用了 1 ~ 4 個 byte 來表示一個字元。



實際應用

以上就是關於各編碼的字元集的介紹,

在 Python 中,

沒有所謂的字元 ( character ) 資料型態,

即使是一個字元的也稱之為字串 ( string )。

在 Python 內部使用 str 這個資料型態沒有問題,

當今天要與外界交換資料時,

特別是在網際網路上以及使用中文的時候,

常出現亂碼,

這是因為編碼型態不同造成,

所以必須將原有的 str 轉為 bytes 型態來使用。

在字串前面加上一個 b,

b'字串'

表示此字串的 bytes 資料。

字串轉 bytes 資料

將字串轉為 bytes資料稱之為編碼,

使用 encode() 來轉換:

stringA = '李'

stringA_to_Bytes = stringA.encode('字元集')

這字元集,

就是使用 "ascii"、"utf-8"、"unicode" 等等上述的編碼方式

bytes 資料轉字串

相反的,

將 bytes資料轉為字串到 Python 來使用,

則需要以 decode() 來轉換:

stringB = stringA_to_Bytes.decode('字元集')

以同樣的字元集來解碼即可。


同樣的字使用不同的編碼方式會有不同的值,

若在程式設計的過程中出現亂碼,

多為編碼的問題所致。