iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
AI & Data

30天帶你從零基礎到Python爬蟲系列 第 11

[Day11] 迴圈小試身手 - 凱薩密碼 & 估計圓面積

  • 分享至 

  • xImage
  •  

今天一樣是練習天,一樣也是兩個題目,但我覺得比昨天的好玩一點。

凱薩密碼

這是一個很有名的加密技術,就是把所有字母在字母表上往前或往後推移,這次就設定把所有字母往後推兩格。首先先設定好原本的密碼,還要有一個空白的字串,待會會把轉換好的字母一個一個放進去。

s = "abcdz"
secrect = 2
ans = ""
i = 0

如果要直接換字母電腦是做不到的,都要先把字母轉換成數字,位移好後再轉換回字母,像是第二行出現的ord()是用來把括號內的字母轉換成ASCII碼,如果是要把ASCII碼轉換成字母的話是用chr()。因為字母推移其實跟剪刀石頭布是很像的,它們都有一個循環的關係在,a會變成b、z又會變回a,所這邊一樣用取餘數的方式來計算,但因為a~z的ASCII碼是97~122,但取餘數都是從0開始,所以第五行的部分就是全部-97,讓a的數值變成0,b的數值變成1,最後再將它轉換回來就好了~

while i < len(s):
    n = ord(s[i])
    # ord("a") = 97
    # chr(97) = "a"
    n = n - ord("a")
    new = (n + secrect) % 26 + ord("a")
    ans = ans + chr(new)
    i = i + 1
print(ans)

估計圓面積

這邊介紹一個蠻有名的測量方法--蒙地卡羅法,是使用隨機數來解決很多計算問題的方法,其實用很白話的方式說就是用猜的,雖然可能不準確,但只要樣本數夠多就越接近真實答案。

今天要利用蒙地卡羅法來計算一個圓面積(先假裝你不知道A=πr^2),你可以想成有一個湖,先用一個正方形將它包起來,再隨機丟石頭在那個湖裡,最後根據你丟進湖的數量除上總共丟出的石頭,就可以得到比例,而外面的面積乘上比例就可以得到圓的面積。那因為樣本數越多就越準確,所以先設定總共執行10000次。

import random
total = 10000  # 總共執行次數
incircle = 0  # 丟進圓內的石頭
i = 0

之前有用過random模組裡的randint,它是產生隨機整數,但今天要做的是生成1~-1之間的隨機小數,所以使用裡面的uniform函式。那要如何判斷點有沒有在圓裡面呢?就是看x^2*y^2=r^2。

while i < total:
    x = random.uniform(-1, 1)  # 產生1~-1之間的隨機小數 
    y = random.uniform(-1, 1)
    if x ** 2 + y ** 2 <= 1:
        incircle = incircle + 1
    else:
        pass  # 什麼都不做
    i = i + 1

因為一開始設定圓的半徑是1,我用半徑2的正方形將它匡住,所以面積是4*ratio,當然你也可以用很大的矩形圍住湖,這個是沒有硬性規定的喔~

ratio = incircle / total
print("面積: ", 4 * ratio)

上一篇
[Day10] 迴圈小試身手 - 確認座標位置 & 取商數
下一篇
[Day12] 迴圈小試身手 - 輸入密碼 & 紙折幾次會比101高
系列文
30天帶你從零基礎到Python爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言