D-LAB Python X 使用者體驗設計

Pyladies Taiwan

Speaker : Mars

2016/10/27

Roadmap

  • 10/20 回顧
  • 小技巧
  • 迴圈 loop
  • 更多變數型態

10/20 練習題

簡易型計算機(加減乘除、次方、餘數),
輸入一行文字,印出計算結果

  • 只會有兩個數字,與一個運算元

ex:

  • 11+2 -> 13
  • 2**3 -> 8
  • 10%3 -> 1
In [2]:
keyin = input("請輸入您要計算的內容,限二個數字 ex: 2**3\n")
if "+" in keyin:
    split_keyin = keyin.split("+")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)+int(b))
elif "-" in keyin:
    split_keyin = keyin.split("-")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)-int(b))
elif "**" in keyin:
    split_keyin = keyin.split("**")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)**int(b))
elif "*" in keyin:
    split_keyin = keyin.split("*")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)*int(b))
elif "/" in keyin:
    split_keyin = split_keyin.split("/")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)/int(b))
elif "%" in keyin:
    split_keyin = keyin.split("%")
    a = split_keyin[0]
    b = split_keyin[-1]
    print (keyin,"=",int(a)%int(b))
請輸入您要計算的內容,限二個數字 ex: 2**3
2**3
2**3 = 8

小技巧

使用Teminal執行Python程式

新增.py檔案

  • 新增一個Text File (New>Text File)
  • 把檔案改名成 檔案名稱.py,將程式碼寫在檔案中

執行python程式

  • 新增一個Terminal (New>Terminal)
  • 輸入 python 檔案名稱.py

檔案管理

除了用jupyter的檔案總管介面管理檔案,也可以利用Terminal執行Unix語法做檔案管理

  • cd <path>:進入位置
  • ls <path>:列出位置下的檔案
  • mkdir <folder_name>:新增檔案夾
  • cp <now_file_path> <new_file_path>:複製檔案
  • mv <now_file_path> <new_file_path>:移動檔案
  • rm <now_file_path>:刪除檔案 -rm -r <now_path>:刪除檔案夾
  • pwd:顯示現在的位置

學程式的小技巧

  • 修修改改:理解這段程式碼如何運作的
  • 模仿:「先自行寫一輪」,再看解答怎麼寫的,看看為什麼這樣寫會比較好

迴圈 loop

[think]

  • 我想要輸入10個不相等的變數
  • 我想要輸入一串數組ex:(1,2,3,4,5),然後印出相加的總和
  • 我想要算出字串"「1」、「5」、「7」、「3」、「2」、「6」"出現數字的總和

while

  • 處理「未知」次數的重複狀況
  • while(條件成立): 執行某事
In [100]:
# 輸入5個不相等的數字
my_list = []
while(len(my_list)<5):
    input_word = input("請輸入數字")
    input_num = int(input_word)
    if input_num not in my_list:
        my_list.append(input_num)
    print (my_list)
請輸入數字1
[1]
請輸入數字2
[1, 2]
請輸入數字4
[1, 2, 4]
請輸入數字5
[1, 2, 4, 5]
請輸入數字4
[1, 2, 4, 5]
請輸入數字3
[1, 2, 4, 5, 3]

for

  • 處理「已知」次數的重複狀況
  • 常用在取出元素
In [102]:
my_list=[1,2,5,7,6]
for i in my_list:
    print (i)
1
2
5
7
6
In [106]:
for i in "Hello":
    print (i)
H
e
l
l
o
In [81]:
data = "「1」、「5」、「7」、「3」、「2」、「6」"
data = data.replace("「","") 
data = data.replace("」","")
print (data)
print (data.split("、"))
1、5、7、3、2、6
['1', '5', '7', '3', '2', '6']
In [89]:
my_sum = 0
for i in data.split("、"):
    my_sum+=int(i)
    print (i,my_sum)
print ("The sum of list is",my_sum)
1 1
5 6
7 13
3 16
2 18
6 24
The sum of list is 24

練習

  • 輸入10個不重複的數字,印出其中為奇數的數字
    • 重複輸入數字
    • 如果輸入的數字存在串列中,則繼續輸入
    • 取得串列的各個元素
    • 如果餘數=1才印出

range

  • 產生範圍內的數字
  • range([start,]end[,step])
    • start 是 inclusive
    • end 是 exclusive
    • step 是一次跨幾格
In [22]:
print (list(range(10)))
print (list(range(1,10)))
print (list(range(1,10,2)))
print (list(range(10,0,-1)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
In [92]:
for i in range(1,5+1):
    print ("*"*i)
*
**
***
****
*****

應用情境

In [27]:
# 判斷此字串是否為回文
s = "上海自來水來自海上"
s_front = ""
s_back = ""
half_len_of_s = int(len(s)/2)
for i in range(0,half_len_of_s):
    s_front+=s[i]
for i in range(len(s)-1,half_len_of_s,-1):
    s_back+=s[i]

if s_front==s_back:
    print (("「%s」是回文字串")%(s))
else:
    print (("「%s」不是回文字串")%(s))
「上海自來水來自海上」是回文字串

練習

  • 產生無重複數字的三位數
    • 列出100~999的數字
    • 利用除法、取餘數,取得各位數的值 or 轉成字串,取各位數
    • 比較各位數,要三個位數都不相等