--- title: '基礎語法(迴圈)' disqus: hackmd --- # 第二節社課 ## 前言 第二節課了,希望大家都有寫作業。 --- # 作業題解 相信你們都有寫作業吧? ## a001 哈囉 字串(str)的運用,把2個要求的字串+起來就行了。 ## a014 中華民國萬歲! 大家應該都知道西元年轉民國是要`-1911`吧? ## a021 三人行必有我師 只要用`if`判斷哪個是最大的就行了。 :::spoiler 假如你特別電:lightning: 你也可以用`max`來解喔owob ::: ## b172 等式(1) 如果你想要,你或許可以遍歷整個`str`然後寫一堆`if`,不過很顯然這樣超麻煩,所以我在這邊推薦個好用的東西:`eval()` 這神奇的東西真是太好用了,可以自己研究一下。 :::warning :warning: 提醒:eval()會**直接執行字串中的 Python 程式碼**,如果這個字串來自使用者輸入,就會有安全風險,所以最好在可控制輸入的地方用。 ::: :::spoiler 順帶一提 如果你去看`AC`列表,你就會發現都是python(統計至2025/9/22下午9:35),只能說python還是太強大了。(不排除除了資研社以外沒人寫這題的可能就是了) ::: --- # 迴圈 為了讓程式運行你想要的次數,我們是時候學習一下迴圈了~ 最經典的迴圈有2種: - `while` - `for` :::info :::spoiler 啊遞迴呢?? 如果你已經了解到遞迴了,那我可以告訴你,遞迴本質上是迴圈沒錯,但這要在之後的課程才會提到,所以我知道你很急,但是先別急,總會學到的...吧(? ::: ## while迴圈 `while`迴圈是coder們最常用的迴圈之一,他會在後面的條件(bool)成立(True)時執行後面的程式。 ```python= count = 1 #宣告一個<class 'int'>的count用來數數 while count <= 5: #這樣會從1跑到5 print(count, end = ' ') #1 2 3 4 5 count += 1 #讓count變大,否則會變成無限迴圈 ``` 相信這簡單到我不用多說大家都懂(? 我們再看下一個: ```python= correct_password = "TEmPTaTiON" #設定正確的密碼 attempt = 1 #紀錄嘗試的次數 while attempt <= 3: #嘗試次數不大於3時執行 pw = input("請輸入maimai中MASTER譜面現定數為14.7,有ASMR但手感很差的傻逼歌:") if pw == correct_password: print("welcome to maimai~") break else: print(f"你已經錯{attempt}次了,你到底是不是mai眾啊") attempt += 1 else: #嘗試超過3次(attempt > 3) print("摸摸認證 += 1") ``` ^上面的歌曲介紹來自高二3xx班的某位打mai的邱先生^ 上面的code讓我們可以在使用者輸入超過3次錯誤密碼的時候,讓他無法再輸入密碼。 ~~成功阻止沒打mai的人登入了,附上這首歌的[maimai維基](https://maimai.fandom.com/zh/wiki/TEmPTaTiON?variant=zh-tw)~~ :::info :::spoiler 至於之前提到的多筆輸入... 相信學到這邊都會知道是什麼意思了吧? `while True:` : 表示當`True`成立,也就是無限迴圈 `except EOFError:` 表示除了發生`EOFError`以外都會執行前面的`try:`,若是發生`EOFError`則執行下面的`break` 附上`EOF`的[維基百科](https://zh.wikipedia.org/wiki/%E6%AA%94%E6%A1%88%E7%B5%90%E5%B0%BE),簡單來說就是沒有輸入了。 :::success :heavy_check_mark:相信現在的你們都可以看懂了:+1:對吧?嗯? ::: ## for迴圈 ```python= for i in range(1, 7): print(f"現在是第{i}次執行迴圈") #現在是第(1~6)次執行迴圈 ``` 還記得之前我們說過,str是使用==前閉後開==的方式來判斷位置的,`range()`也是前閉後開。 也就是說,上面的`in range(1, 7)`實際上是由1到6,因為後面是==開==,所以不包含`7`。 :::info :information_source: 我知道這樣說怪怪的,但就是這樣 :::spoiler 補充:range()是甚麼 ```python= range(10) -> 0 1 2 3 4 5 6 7 8 9 range(1, 5) -> 1 2 3 4 range(1, 7, 2) -> 1 3 5 ``` 當`range`只有1個數`(n)`時,會由`0`到`n - 1` 當`range`有2個數`(x, y)`時,會由`x`到`y - 1` 當`range`有3個數`(x, y, z)`時,會由`x`到`y - 1`而且公差是`z` 因為是前閉後開所以結尾要記得`-1` ::: ```python= s = 'nowob_love_peko' for i in s: print(i, end = ' ') #n o w o b _ l o v e _ p e k o ``` 在上面我們看到,`i`跑過了每個在`s`裡的東西,而且這裡的`i`是`char`。 然後我們輸出所有的`i`,而且結尾用空白間隔開。 :::info :::spoiler 如果想讓`i`的`ascii`碼`+2`再輸出怎麼辦? ```python= s = 'nowob_love_peko' for i in s: print(chr(ord(i) + 2), end = ' ') #p q y q d a n q x g a r g m q ``` 1.用`ord(i)`讓`i`變成`ascii`碼 (這是`int`型態) 2.對`i`的`ascii`碼`+2` 3.再把+完2的數字轉回`char` 這樣我們就成功輸出了對每個`i`的`ascii`碼`+2`的東西了。 :::warning 話說如果你不知道`ascii`是什麼,這裡有[維基百科](https://zh.wikipedia.org/zh-tw/ASCII)。 ::: --- # 作業題目 基礎題:[a038](http://203.64.191.163/ShowProblem?problemid=a038)、[a191](http://203.64.191.163/ShowProblem?problemid=a191)、[a192](http://203.64.191.163/ShowProblem?problemid=a192) 進階題:[a228](http://203.64.191.163/ShowProblem?problemid=a228) ==ps:a191和a192是多筆測資==
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up