案例1:程序輸入輸出 案例2:判斷合法用戶 安全3:編寫判斷成績的程序
1 案例1:程序輸入輸出
1.1 問題python
編寫login.py腳本,實現如下目標:vim
提示用戶輸入用戶名 將用戶名保存在變量中 在屏幕上顯示歡迎用戶的信息
1.2 方案安全
編寫程序時,不少狀況下都須要程序與用戶交互。在python中,主要經過raw_input()獲取用戶輸入信息,使用print打印信息。ide
一般當想看變量內容時,會在代碼中使用print語句輸出。不過在交互式解釋器中,能夠用print語句顯示變量的字符串表示,或者僅使用變量名查看該變量的原始值。函數
從用戶那裏獲得數據輸入的最容易的方法是使用raw_input()內建函數。它讀取標準輸入,並將讀取到的數據賦值給指定的變量。須要注意的是,raw_input()函數讀入的數據所有是以字符串的方式存儲的。若是用戶輸的是數字,那麼python也將其保存爲字符串,當將字符串與數字作數學運算是將會出現TypeError的錯誤。測試
初學者在須要顯示信息或獲得用戶輸入時,很容易想到使用print語句和raw_input()內建函數。不過在此建議函數應該保持其清晰性,也就是它只應該接受參數,返回結果。從用戶那裏獲得須要的數據, 而後調用函數處理, 從函數獲得返回值,而後顯示結果給用戶。這樣你就可以在其它地方也可使用你的函數而沒必要擔憂自定義輸出的問題。這個規則的一個例外是,若是函數的基本功能就是爲了獲得用戶輸出,或者就是爲了輸出信息,這時在函數體使用print語句或raw_input()也何嘗不可。更重要的,將函數分爲兩大類,一類只作事,不須要返回值(好比與用戶交互或設置變量的值), 另外一類則執行一些運算,最後返回結果。若是輸出就是函數的目的,那麼在函數體內使用 print 語句也是能夠接受的選擇。
1.3 步驟編碼
實現此案例須要按照以下步驟進行。code
步驟一:編寫腳本字符串
本次練習的腳本文件是/root/bin/login.py。get
[root@py01 bin]# vim login.py #!/usr/bin/env python username = raw_input('username: ') #使用變量username接收用戶輸入的字符 print 'Welcome', username #輸出歡迎信息,字符串和變量名之間用逗號 #隔開,二者之間自動會加上空格
步驟二:測試腳本執行
[root@py01 bin]# chmod +x login.py #給腳本添加執行權限 [root@py01 bin]# login.py username: bob #輸入用戶名 Welcome bob
2 案例2:判斷合法用戶
2.1 問題
編寫login.py2腳本,實現如下目標:
提示用戶輸入用戶名和密碼 將用戶名和密碼分別保存在變量中 若是用戶名爲bob而且密碼爲123456,則輸出Login successful,不然輸出Login inorrect
2.2 方案
本題主要是複合的判斷語句,寫法有以下兩種:
使用兩個判斷語句,先判斷用戶名,若是用戶名正確再判斷密碼是否正確 在一個判斷語句中,同時判斷兩個條件是否所有成立
2.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:編寫腳本
在不少語言中,if後面的判斷條件須要使用圓括號或方括號,可是python並不強制,能夠直接將判斷條件寫在if後面,並不會產生錯誤。
有些時候,判斷條件可能有多個(使用and或or鏈接),爲了更好的可讀性,建議在這種環境下,將多個條件分別用圓括號括起來。
[root@py01 bin]# vim login2.py #!/usr/bin/env python username = raw_input('username: ') password = raw_input('password: ') if username == 'bob': if password == '123456': print 'Login successful' else: print 'Login incorrect' else: print 'Login incorrect'
或將上面的代碼改成如下寫法:
[root@py01 bin]# vim login2.py #!/usr/bin/env python username = raw_input('username: ') password = raw_input('password: ') if username == 'bob' and password == '123456': print 'Login successful' else: print 'Login incorrect'
步驟二:測試腳本執行
[root@py01 bin]# ./login2.py username: bob password: 123456 Login successful [root@py01 bin]# ./login2.py username: bob password: abcd Login incorrect [root@py01 bin]# ./login2.py username: tom password: 123456 Login incorrect
步驟三:改進腳本
腳本程序在運行時,應該將敏感的密碼隱藏,不要顯示在屏幕上。爲了實現這個功能,可使用getpass模塊中的getpass方法。
getpass能夠像Linux處理密碼同樣,屏幕上不出現任何字符,可是用戶的輸入能夠保存到相應的變量中。
上面的代碼能夠改寫爲:
[root@py01 bin]# vim login2.py #!/usr/bin/env python import getpass username = raw_input('username: ') password = getpass.getpass('password: ') if username == 'bob' and password == '123456': print 'Login successful' else: print 'Login incorrect'
測試腳本執行:
[root@py01 bin]# ./login2.py username: bob password: 123456 #此處所填寫的密碼將不在屏幕上顯示 Login successful
3 安全3:編寫判斷成績的程序
3.1 問題
編寫score.py腳本,根據用戶輸入的成績分檔,要求以下:
若是成績大分60分,輸出「及格」 若是成績大於70分,輸出「良」 若是成績大於80分,輸出「好」 若是成績大於90分,輸出「優秀」 不然輸出「你要努力了」
3.2 方案
本題須要注意的是邏輯順序。在多分支的if語句中,自頂向下逐步匹配,一旦匹配則執行相應的子語句,其餘語句將再也不執行。
所以,在編寫代碼時要注意邏輯,成績是100分也大於60分,若是把判斷較小分數的語句寫在前面,那麼是凡大於60分的成績都是輸出「及格」,那麼只有第一個判斷語句會執行,因此應該把分值更高的判斷寫在上面。
3.3 步驟
實現此案例須要按照以下步驟進行。
步驟一:編寫腳本
[root@py01 bin]# vim score.py #!/usr/bin/env python #coding: utf8 #爲了程序能夠支持中文,指定UTF8編碼 score = int(raw_input('enter score: ')) if score > 90: print '優秀' elif score > 80: print '好' elif score > 70: print '良' elif score > 60: print '及格' else: print '你要努力了!'
步驟二:測試腳本執行
[root@py01 bin]# ./score.py enter score: 59 你要努力了! [root@py01 bin]# ./score.py enter score: 88 好