Python實(shí)現(xiàn)ATM系統(tǒng)
今天偶爾在知乎上看到某大佬用Python寫的ATM系統(tǒng)案例,然后觀摩了下他的實(shí)現(xiàn)思路和源碼,感覺(jué)受益頗多,于是就根據(jù)自己的思路和目前掌握的Python編程基礎(chǔ)將ATM實(shí)現(xiàn)了一下,以下是案例解析的過(guò)程:
案例剖析:
1.atm主頁(yè)面顯示.
2.賬號(hào)驗(yàn)證.
3.查詢余額.
4.存款.
5.取款.
6.修改密碼.
ps:我的思路是將以上的功能分成幾大塊,通過(guò)函數(shù),循環(huán)和返回值來(lái)實(shí)現(xiàn),話不多說(shuō)直接上代碼.
代碼:
1.atm主頁(yè)面顯示
def index(nowUser): print('=' * 10, '自動(dòng)存取款機(jī)', '=' * 10) print(getName(nowUser), '歡迎登陸!') print('{:<10}{:^10}{:<10}'.format('1.修改密碼', ' ', '2.查詢余額')) print('{:<10}{:^12}{:<10}'.format('3.存錢', ' ', '4.取錢')) print('輸入\'exit\'退出操作')
ps:使用format來(lái)進(jìn)行格式的定義.
2.賬號(hào)驗(yàn)證
def getId(nowUser): '''獲取當(dāng)前用戶在列表中的位置''' index = -1 for i in range(len(userList)): if userList[i]['cardid'] == nowUser: index = i # 如果用戶存在則返回它在列表中的下標(biāo) break return index # 如果用戶不存在則返回-1 def getName(nowUser): ''' 獲取用戶姓名''' index = getId(nowUser) return userList[index]['name'] def checkUser(cardid, password): '''自定義用戶檢測(cè)功能,包括卡號(hào)及密碼檢測(cè)''' index = getId(cardid) if index == -1: # 如果用戶不存在 return 'noCardId' # 卡號(hào)不存在 else: if userList[index]['cardid'] == cardid and userList[index]['password'] == password: # 用戶存在并且賬號(hào)密碼正確 return 'login' # 密碼正確 else: return 'errorPW' # 密碼錯(cuò)誤
ps:使用循環(huán)和返回值來(lái)進(jìn)行賬號(hào)的對(duì)比和檢測(cè).
3.查詢余額
def showMoney(nowUser): '''查詢余額''' index = getId(nowUser) print('您當(dāng)前的賬戶余額為:', userList[index]['money'], '元')
4.存錢
def saveMoney(nowUser, money): '''存錢''' index = getId(nowUser) print("輸入的金額是:", money) userList[index]['money'] += int(money) print('存入成功!')
5.取錢
def drawMoney(nowUser, money): '''取錢''' index = getId(nowUser) nowMoney = userList[index]['money'] if nowMoney >= int(money): userList[index]['money'] -= int(money) print('已取出', money, '元') else: print('賬戶余額不足!')
6.修改密碼
def changePW(nowUser, newPW): '''修改密碼''' index = getId(nowUser) userList[index]['password'] = newPW
7.定義用戶操作函數(shù)
# 用戶操作 def userChoice(nowUser): choices = ['1', '2', '3', '4', 'exit'] # 循環(huán)獲取用戶操作 while True: index(nowUser) choice = input('請(qǐng)選擇操作:') if choice == '1': # 選擇修改密碼 oldPW = input('請(qǐng)輸入原始密碼:') flag = checkUser(nowUser, oldPW) if flag == "errorPW": # print('密碼錯(cuò)誤!請(qǐng)重新輸入,或輸入\'back\'返回上一級(jí)') print('密碼錯(cuò)誤!返回主界面') elif flag == 'login': changePW(nowUser, input('請(qǐng)輸入新密碼:')) print('修改密碼成功!') continue elif choice == '2': # 選擇查詢余額 showMoney(nowUser) continue elif choice == '3': # 選擇存錢 saveMoney(nowUser, input('請(qǐng)輸入存入金額:')) continue elif choice == '4': # 選擇取錢 drawMoney(nowUser, input('請(qǐng)輸入取出金額:')) continue elif choice == 'exit': main() # 返回主界面 elif choice not in choices: print('錯(cuò)誤操作,請(qǐng)重新輸入選項(xiàng)!') continue
8.定義main主函數(shù)
# 主界面 def main(): # 定義錯(cuò)誤次數(shù) errorTime = 0 if errorTime >= 3: # 錯(cuò)誤次數(shù)達(dá)三次退出系統(tǒng)后清零 errorTime = 0 while True: # crs登陸主界面 print('=' * 10, '自動(dòng)存取款機(jī)', '=' * 10) nowUser = '' # 用戶輸入卡號(hào)和密碼 cardid = input('請(qǐng)輸入卡號(hào):') password = input('請(qǐng)輸入密碼:') # 判斷卡號(hào)密碼是否存在正確 # 卡號(hào)不存在 flag = checkUser(cardid, password) if flag == 'noCardId': print('卡號(hào)不存在!請(qǐng)重新輸入') continue # 密碼錯(cuò)誤 elif flag == 'errorPW': errorTime += 1 print('密碼錯(cuò)誤!錯(cuò)誤次數(shù)達(dá)三次將自動(dòng)退出本系統(tǒng)!') print("錯(cuò)誤次數(shù):", errorTime) if errorTime >= 3: # 錯(cuò)誤次數(shù)達(dá)三次自動(dòng)退出 print('密碼輸錯(cuò)三次,自動(dòng)退出系統(tǒng)!') exit(0) continue # 卡號(hào)密碼正確進(jìn)入系統(tǒng) else: nowUser = cardid userChoice(nowUser)
9.最后定義函數(shù)主入口,進(jìn)行ATM系統(tǒng)的測(cè)試
if __name__ == '__main__': main()
收獲:
通過(guò)ATM案例 ,將之前學(xué)習(xí)的Python基礎(chǔ)重新進(jìn)行了一次鞏固,梳理和融會(huì)貫通,個(gè)人感覺(jué) Python的函數(shù)和返回值是個(gè)特別神奇的東西,當(dāng)然這個(gè)案例還有很大的改進(jìn)空間,大家有什么好的建議也可以給我留言,我之后會(huì)慢慢進(jìn)行改良噠!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python pyheatmap包繪制熱力圖
- python繪制熱力圖heatmap
- Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能
- Python 實(shí)現(xiàn)網(wǎng)課實(shí)時(shí)監(jiān)控自動(dòng)簽到、打卡功能
- python3 實(shí)現(xiàn)口罩抽簽的功能
- Python 3.8 新功能來(lái)一波(大部分人都不知道)
- python爬蟲開(kāi)發(fā)之使用python爬蟲庫(kù)requests,urllib與今日頭條搜索功能爬取搜索內(nèi)容實(shí)例
- Python ATM功能實(shí)現(xiàn)代碼實(shí)例
相關(guān)文章
詳解python3類型注釋annotations實(shí)用案例
這篇文章主要介紹了詳解python3類型注釋annotations實(shí)用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python實(shí)現(xiàn)時(shí)間o(1)的最小棧的實(shí)例代碼
這篇文章主要介紹了python實(shí)現(xiàn)時(shí)間o(1)的最小棧的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07pycharm 實(shí)現(xiàn)復(fù)制一行的快捷鍵
這篇文章主要介紹了pycharm 實(shí)現(xiàn)復(fù)制一行的快捷鍵,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01python3.x 生成3維隨機(jī)數(shù)組實(shí)例
今天小編就為大家分享一篇python3.x 生成3維隨機(jī)數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11導(dǎo)入tensorflow:ImportError: libcublas.so.9.0 報(bào)錯(cuò)
這篇文章主要介紹了導(dǎo)入tensorflow:ImportError: libcublas.so.9.0 報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01從CentOS安裝完成到生成詞云python的實(shí)例
下面小編就為大家分享一篇從CentOS安裝完成到生成詞云python的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-12-12利用Python中?Rembg庫(kù)實(shí)現(xiàn)去除圖片背景
這篇文章主要介紹了利用Python中?Rembg庫(kù)實(shí)現(xiàn)去除圖片背景,文章基于?Rembg庫(kù)得運(yùn)用展開(kāi)詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05