PYTHON
的執行是直譯器(依照程式碼一行一行依序執行)。IDLE
、Anaconda
等。print()
是輸出函數,
'hello, world'
是一字串型態的參數。
100
是一整數型態的參數。
int
: integer
整數型態。str
: string
字串型態,以 ""
或是 ''
包圍字串。float
: 小數型態(浮點數型態)。bool
: boolean
布林值型態,True
代表 1
,False
代表 0
。NoneType
:沒有型態。complex
:複數型態,以 A+Bj
表示。+
加法運算子: int
, str
, float
, bool
, complex
。−
減法運算子: int
, float
, bool
, complex
。∗
乘法運算子: int
, str
, float
, bool
, complex
。/
除法運算子: int
, float
, bool
, complex
。//
整數除法運算子: int
, float
, bool
, complex
。%
餘數運算子: int
, float
, bool
。∗∗
指數運算子: int
, float
, bool
, complex
。+
加法運算僅限於兩字串形態相加,若「字串 +
整數」或「整數 +
字串」(整數可替換為其它形態),會發生執行錯誤。∗
乘法運算僅限於「字串 ∗
整數」或是「整數 ∗
字串」(只能整數)。PYTHON
可以,其它語言大部分不行)。⟶
n += 2⟶
n −= 2⟶
n ∗= 2⟶
n /= 2⟶
n //= 2⟶
n %= 2sep
參數改變。end
參數改變。>
: 大於。>=
: 大於等於。<
: 小於。<=
: 小於等於。==
: 等於。!=
: 不等於。關係運算回傳值為布林值的 True 或 False 。
True | False | |
---|---|---|
True | ||
False |
True | False | |
---|---|---|
True | ||
False |
True | False | |
---|---|---|
True |
expression
是 True
就執行以下 statements
。空四格
或是 Tab
,不可混著使用)。elif
是 else
和 if
的簡寫,意思是如果還有條件是否為 True
。else
是所有條件皆不成立,才會執行。expression
成立,執行完其 statements
,即會跳出其它的 expression
。loop
稱為迴圈,分為兩種:
while loop
for loop
當expression
成立時,
就一直重複執行縮排內的 statements
,
直到 expression
為 False
時即停止。
用一個變數 i
迭代一個可迭代的物件。
常見可迭代物件:
range
: range(start, stop, step)
map
: map(function, iterable)
回傳一個迭代器 (iterator
),使用 iterable
的每個元素來計算函數。原文:(make an iterator that computes the function using arguments from each of iterables.)。filter
: filter(func or None, iterabe)
,返回一個迭代器,產生 iterable
中 function(item)
為 True
的項目,如果函數為 None
,則返回為 True
的項目。(原文:return an iterator yielding those iems of iterable for which fucntion(item) is True. If function is None, return the item that are True)。str
: 字串。list
: 串列。tuple
。dict
: 字典。在了解 function
之前,
其實我們已經先用很多 function
了。
print()
input()
int()
, str()
, float()
等。sum()
, min()
, max()
, len()
等。function
可以使用。abs(value)
: 回傳 value
的絕對值。bin(interger)
: 回傳 interger
的二進位表示值。divmod(x, y)
: 回傳 tuple(x // y, x % y)
。eval(string)
: 評估給定的 string
,對於 string
做給定的指令。(原文:evaluate the given source int the context of globlas and locals.)。oct(interger)
: 回傳 interger
代表的八進位表示值。pow(base, exp, mod)
: 回傳 。若沒有傳入 mod
參數,則回傳 。sorted(iterable, key = None, reverse = False)
: 回傳一個排序好的 iterable
物件。可依照喜好的 key
和是否要 reverse
排序。我們也可以自己寫 function
。
function
看似多了個步驟,
用起來還要注意細節,
十分麻煩。
但其實 function
對於重複性質高程式碼,
可帶來很大的便利。
還有「匿名函數(lambda function
)」可以用。
冒號前面是參數,
冒號後面是回傳值。
對於只需使用一次的函數,
通常會用匿名函數表示。
import
module
,
顧名思義就是導入模組,
由於簡化程式碼長度,
可以導入已經寫好的模組使用。
導入方式(以 math
為例) :
datetime
: 處理基本的日期和時間類型處理基本的日期和時間類型itertools
: 為高效循環而創建迭代器的函數。math
: 數學函數random
: 生成隨機數。事實上,
還有很多模組要透過網路下載,
有些 OJ
並不能使用,
而這些模組就是 PYTHON
的精華所在。
1
~ len(list) - 1
,大於 len(list) - 1
會發生錯誤。-1
~ -len(list)
, 小於 -len(list)
會發生錯誤。index
所對應到的值。list
。lst[start: stop: step]
,stop
預設是 len(list)
,step
預設是 1
。append(object)
: 將 object
加到 list
的末尾。clear()
: 從 list
刪除所有項目。copy()
: 回傳一個淺複製的 list
。count(value)
: 回傳 value
出現的次數。extend(iterable)
: 透過附加的 iterable
的元素來拓展 list
。index(value)
: 回傳 value
在 list
的第一個 index
,若 value
不在 list
,則會發生錯誤。insert(index, object)
: 插入object
在 index
前。pop()
: 若無參數,則刪除尾端元素;反之,刪除指定 index
的元素。若指定 index
超過 list
的長度會發生錯誤。對於空的 list
使用 pop()
亦會發生錯誤。若成功執行,會回傳刪除的元素。remove(value)
: 刪除 value
在 list
第一次出現的值。如果 value
不在 list
則會發生錯誤。reverse(value)
: 刪除 value
在 list
第一次出現的值。如果 value
不在 list
則會發生錯誤。reverse()
: 將 list
反轉。sort()
: 數字型態不可和字串形態排序。若無參數,則將 list
由小到大排序。參數可有 key
、reverse
,key
可以依照喜好方法排序,reverse
預設是 False
,可以改成 True
,設為由大到小排序。len(list)
: 回傳 list
的長度。max(list)
: 回傳 list
的最大值。min(list)
: 回傳 list
的最小值。sum(list)
: 回傳 list
的總和。range()
、len()
、index
。enumerate
以 index
、value
迭代。同 list
。
s.capitalize()
:回傳第一個字元為大寫的 s
字串(不會更改 s)。s.upper()
:回傳英文部分全部大寫(其餘部分不變)的 s
字串(不會更改 s
)。s.lower(
) :回傳英文部分全部小寫(其餘部分不變)的 s
字串(不會更改 s
)。s.isupper()
:如果字串 s
的英文部分全為大寫則回傳 True
;反之 False
。s.islower()
:如果字串 s
的英文全為小寫則回傳 True ;反之 False 。s.isalpha()
:如果字串 s
全由字母組成則回傳 True
;反之 False
。s.isdigit()
:如果字串 s
全由數字組成則回傳 True
;反之 False
。s.count(sub, start, end)
:回傳 sub
在 s[start: end]
出現的次數。若沒有傳入 start
、end
參數,則預設為 0
、len(s)
。s.find(sub, start, end)
:回傳 sub
在 s[start: end]
第一個出現的位置,若 sub
不在 s
裡面,則回傳 −1
。若沒有傳入 start
、end
參數,則預設為 0
、len(s)
。s.join(list)
:在 list
內每一個字串插入 s
,並回傳一個新字串。list
內的每一個元素型態一定要是 str
,否則會出現錯誤。s.lstrip()
:回傳移除左端不可見字元的字串 s
(不會更改 s
)。s.rstrip()
:回傳移除右端不可見字元的字串 s
(不會更改 s)。s.strip()
:回傳移除兩端不可見字元的字串 s
(不會更改 s)。s.replace(sa, sb, times)
:回傳字串 s
中 sa
取代成 sb
的字串,times
為次數(不會更改 s
)。若沒有傳入 times
參數,則預設是 −1
,也就是全部取代。s.split(sep, times)
:使用 sep
作為分隔字串,times
為分隔次數,並回傳一個 list
(不會更改 s
)。若沒有傳入 sep
參數,則以空白字元為預設。若沒有傳入 times
參數,則預設值是 −1
,也就是全部取代。len(s)
:回傳 s
的長度。同 list
。
dict
dict
key
:關鍵字,欲存取對應值的關鍵字。 key
必須是 hashable
(如: list
不可當 key
)。value
:值,關鍵字對應的值。value
可為任意型態clear()
:從 dict
刪除所有項目。copy()
:回傳一個淺複製的 dict
。keys()
:回傳一個所有 keys
的 dict_keys
(類似 list
)。values()
:回傳一個所有 values
的 dict_values
(類似 list
)。get(key)
:則回傳 key
在 dict
裡面對應的 value
。若 key
不在 dict
裡面,則會回傳 None
。items()
:回傳一個所有 keys
和 values
(每組數據是 tuple
型態) 的 dict_items
(類似 list
)。pop(key)
:則刪除該組 key
和 value
,並回傳 value
。若 key
不在 dict
裡面,則會發生錯誤。popitem()
:刪除並返回最後加入(也就是 dict
的最後一項)的 (key, value)
(tuple
型態)。若 dict
沒有元素,則會發生錯誤。len(dict)
:回傳 dict
的長度。key
、dict[key] = value
方式呈現。key
, value
迭代 dict_items()
。zip()
把 d.keys()
和 d.values()
壓縮起來一起迭代。Register and log in Discord (也有手機 App 版)
Enter in Discord Developer
Click New Application
Create an Application
Click Bot
Click Add Bot
Back to Discord
需要一個 server
(伺服器、群組) 放 bot
,
而這個必須擁有 管理者
的身分,
可以自己創一個 server
就一定會有管理者的身分,
別人的群組則大部分不會開管理者給成員。
Click QAuth2
Click bot
Click these
Click Copy
將連結貼至瀏覽器上
選擇一個 server 並按下 繼續
Back to Discord, and the bot is ready.
如果要將某個函式放入該函式的參數中,
可以使用修飾器。
async
意指異步執行,
而 await
則是用來驅動 async
函式的必須指令。
在 Python 3.5 之前,協程函式只能用以下方法實作:
在協程函式中會放置 return
或是 yield from
,
兩者都會回傳 generator
,
要使用 loop.run_until_complete()
才能回傳真實結果。
Python 3.5 之後,
使用下列方法:
如果在 async
區塊中使用協程時,可以使用 await
。
IDE(Integrated Development Environment) : repl.it
command_prefix
: 指令前面要加的輸入bot
也需要用到 help
,所以把內建的 help
函數移除bot
開始執行時會進入這個函數status
是 bot
的狀態activity
是 bot
的動作dnd (do_not_disturb)
: 勿擾idle
: 閒置offline
: 下線online
: 上線invisible
: 不可見Streaming
Activity
Game
server
時會進入這個函數/
後面一整串)server
時會進入這個函數channel
是自己頻道的編號(也就是網址 url
的最後一個 /
後面一整串)func_name
是函數的名稱ctx
是指 context
上下文欲回傳的訊息
必須是字串latency
中文是等待時間,相當於 bot
的延遲。[1, 5]
的整數,猜中了會回傳 True
;反之,False
。bot
有哪些功能。+ New repl
,選擇 PYTHON
語言,打上這個專案的名字,按下 Create repl
。keep_alive.py
貼至 main.py
裡面。main.py
最上面加入 import keep_alive
。main.py
加入 keep_alive.keep_alive()
,位置如下:run
(第一次需要下載套件,要等會兒)bot
的 網站 ,註冊並登入帳號。+Add New Monitor
,Monitor Type
選 HTTP(s)
,URL (or IP)
貼 repl
右上方的網址 (如下圖 1.),Monitoring Interval
是 監控間隔
,用最短的 5 minutes
就好,Select "Alert Contacts To Notify"
是 bot
有離線或重新上線是否需要 email
通知,視個人決定要不要勾選。最後會變成如下圖 2.,按下 Create Monitor
。 (第一次需要一點時間抓取資料,要等會兒)如果你的機器人在其它檔案,那你要如何載入呢?
有一個方法適用,
創建一個資料夾叫做 core
之後,在其中創建一個 classes.py
的檔案,
檔案架構如下:
classes.py
的內容如下 :
其他檔案在 cmds
裡的檔案,
像 cmd1.py
和 cmd2.py
,
則需要在開頭加入 from core.classes import Cog_
以及在結尾加入
檔案內容寫法有些不同。
拿 ping
來舉例,
要將程式碼改成如下才有辦法運作
會變成:
Your_Class
的名字能自己取,基本上你要自己取就自己取
現在,讓我問問你們,有哪裡不一樣了?
答案揭曉
bot
變成 discord.ext
裡的 commands
了bot
都改成 self.bot
了self
self
是自身的意思,
代表著這整個 class
,
self.bot
就等於這整個 class
的 bot
這個屬性
所有 bot.command()
都要換成 commands.command()
而 bot.event
則是換成 commands.Cog.listener()
最後一個步驟則是在 main.py
裡加入下列程式碼,
以在開啟時能載入。
音樂最基本功能當然是播放歌曲啦 XD,
所以要來教你如何編寫 play 指令。
你可以安裝 Black_Lotus
寫的套件,
請使用指令 : pip install NPytdl==4.1.0b2
Source
此指令在以下情況可能會有錯誤產生:
FFmpeg
PyNaCl