1. 程式人生 > >Python編寫判斷成績的程序

Python編寫判斷成績的程序

改進 第一個 存在 用戶輸入 可能 並不會 用兩個 輸入 能夠

案例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。

[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
好

Python編寫判斷成績的程序