標籤:表示 賦值 接受 自訂 優秀 建議 儲存 案例 mod
案例1:程式輸入輸出案例2:判斷合法使用者安全3:編寫判斷成績的程式
1 案例1:程式輸入輸出
1.1 問題
編寫login.py指令碼,實現以下目標:
提示使用者輸入使用者名稱將使用者名稱儲存在變數中在螢幕上顯示歡迎使用者的資訊
1.2 方案
編寫程式時,很多情況下都需要程式與使用者互動。在python中,主要通過raw_input()擷取使用者輸入資訊,使用print列印資訊。
通常當想看變數內容時,會在代碼中使用print語句輸出。不過在互動式解譯器中,可以用print語句顯示變數的字串表示,或者僅使用變數名查看該變數的原始值。
從使用者那裡得到資料輸入的最容易的方法是使用raw_input()內建函數。它讀取標準輸入,並將讀取到的資料賦值給指定的變數。需要注意的是,raw_input()函數讀入的資料全部是以字串的方式儲存的。如果使用者輸的是數字,那麼python也將其儲存為字串,當將字串與數字做數學運算是將會出現TypeError的錯誤。
初學者在需要顯示資訊或得到使用者輸入時,很容易想到使用print語句和raw_input()內建函數。不過在此建議函數應該保持其清晰性,也就是它只應該接受參數,返回結果。從使用者那裡得到需要的資料, 然後調用函數處理, 從函數得到傳回值,然後顯示結果給使用者。這樣你就能夠在其它地方也可以使用你的函數而不必擔心自訂輸出的問題。這個規則的一個例外是,如果函數的準系統就是為了得到使用者輸出,或者就是為了輸出資訊,這時在函數體使用print語句或raw_input()也未嘗不可。更重要的,將函數分為兩大類,一類只做事,不需要傳回值(比如與使用者互動或設定變數的值), 另一類則執行一些運算,最後返回結果。如果輸出就是函數的目的,那麼在函數體內使用 print 語句也是可以接受的選擇。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:編寫指令碼
本次練習的指令檔是/root/bin/login.py。
[[email protected] bin]# vim login.py#!/usr/bin/env pythonusername = raw_input(‘username: ‘) #使用變數username接收使用者輸入的字元print ‘Welcome‘, username #輸出歡迎資訊,字串和變數名之間用逗號 #隔開,兩者之間自動會加上空格
步驟二:測試指令碼執行
[[email protected] bin]# chmod +x login.py #給指令碼添加執行許可權[[email protected] 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串連),為了更好的可讀性,建議在這種環境下,將多個條件分別用圓括弧括起來。
[[email protected] bin]# vim login2.py#!/usr/bin/env pythonusername = raw_input(‘username: ‘)password = raw_input(‘password: ‘)if username == ‘bob‘: if password == ‘123456‘: print ‘Login successful‘ else: print ‘Login incorrect‘else: print ‘Login incorrect‘
或將上面的代碼改為以下寫法:
[[email protected] bin]# vim login2.py#!/usr/bin/env pythonusername = raw_input(‘username: ‘)password = raw_input(‘password: ‘)if username == ‘bob‘ and password == ‘123456‘: print ‘Login successful‘else: print ‘Login incorrect‘
步驟二:測試指令碼執行
[[email protected] bin]# ./login2.pyusername: bobpassword: 123456Login successful[[email protected] bin]# ./login2.pyusername: bobpassword: abcdLogin incorrect[[email protected] bin]# ./login2.pyusername: tompassword: 123456Login incorrect
步驟三:改進指令碼
指令碼程式在運行時,應該將敏感的密碼隱藏,不要顯示在螢幕上。為了實現這個功能,可以使用getpass模組中的getpass方法。
getpass可以像Linux處理密碼一樣,螢幕上不出現任何字元,但是使用者的輸入可以儲存到相應的變數中。
上面的代碼可以改寫為:
[[email protected] bin]# vim login2.py#!/usr/bin/env pythonimport getpassusername = raw_input(‘username: ‘)password = getpass.getpass(‘password: ‘)if username == ‘bob‘ and password == ‘123456‘: print ‘Login successful‘else: print ‘Login incorrect‘
測試指令碼執行:
[[email protected] bin]# ./login2.pyusername: bobpassword: 123456 #此處所填寫的密碼將不在螢幕上顯示Login successful
3 安全3:編寫判斷成績的程式
3.1 問題
編寫score.py指令碼,根據使用者輸入的成績分檔,要求如下:
如果成績大分60分,輸出“及格”如果成績大於70分,輸出“良”如果成績大於80分,輸出“好”如果成績大於90分,輸出“優秀”否則輸出“你要努力了”
3.2 方案
本題需要注意的是邏輯順序。在多分支的if語句中,自頂向下逐步匹配,一旦匹配則執行相應的子語句,其他語句將不再執行。
因此,在編寫代碼時要注意邏輯,成績是100分也大於60分,如果把判斷較小分數的語句寫在前面,那麼是凡大於60分的成績都是輸出“及格”,那麼只有第一個判斷語句會執行,所以應該把分值更高的判斷寫在上面。
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:編寫指令碼
[[email protected] 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 ‘你要努力了!‘
步驟二:測試指令碼執行
[[email protected] bin]# ./score.pyenter score: 59你要努力了![[email protected] bin]# ./score.pyenter score: 88好
Python編寫判斷成績的程式