使用Python
b的簡(jiǎn)單銀行系統(tǒng)背景:?jiǎn)柡。這是我第一次嘗試使用面向?qū)ο蟮姆独ㄔ谶@之前只真正使用了R),項(xiàng)目提示來(lái)自JetBrains學(xué)院,我目前在那里從事Python開發(fā)人員的工
解答動(dòng)態(tài)
As對(duì)于初學(xué)者的OOP代碼來(lái)說(shuō)有點(diǎn)常見,它并不是特別的OOP;它是一個(gè)笨拙的包裝器,包裝了一系列仍然是過(guò)程性的方法。考慮嘗試以下:做一個(gè)Account類按卡號(hào)將帳戶存儲(chǔ)為帳戶對(duì)象的字典,而不是分開的卡號(hào)數(shù)組和密碼,密碼是冗余的(個(gè)人識(shí)別號(hào)),iin從不使用;刪除它使顯示文本菜單和調(diào)用關(guān)聯(lián)函數(shù)的方便函數(shù)referencestr(input())是多余的;input已經(jīng)返回帶有提示字符串的stringCall input,而不是blankIt's welcome,not welcomUse f-strings for your digit formatting code不要使用randint;使用randrange,因?yàn)樗匀坏乇硎九潘畲笾担翰灰獙?duì)PIN使用randint;使用secrets模塊進(jìn)行加密,因?yàn)槟拇蛴。˙ankingSystem().main\u welcom\u screen())沒(méi)有打印任何內(nèi)容,這是沒(méi)有意義的,因?yàn)樵摵瘮?shù)不會(huì)返回任何內(nèi)容您有一個(gè)嚴(yán)重的錯(cuò)誤,現(xiàn)有PIN和卡號(hào)的任何組合都將允許登錄;但是應(yīng)該是一個(gè)特定的卡密碼匹配pairy你有另一個(gè)錯(cuò)誤,在那里調(diào)用出主屏幕返回主屏幕,所以最終你會(huì)吹你的堆棧。不要重復(fù)來(lái),考慮一下為菜單選項(xiàng)添加驗(yàn)證考慮在無(wú)效PIN輸入后添加防強(qiáng)制掛起不要通過(guò)常規(guī)輸入獲取用戶的PIN,這會(huì)使PIN暴露在肩膀上;使用getpass insteadExample實(shí)現(xiàn) from dataclasses import dataclassfrom getpass import getpassfrom random import randrangefrom secrets import randblowfrom time import sleepfrom typing import Dict,Tuple,Callable,ClassVarclass Menu:Menu:ClassVar[Tuple[Tuple[str,Callable[['Menu'],bool]]。。。]]def screen(self):prompt='\n'。加入(f'{i})。{name}'表示枚舉中的i,(name,fun)(自動(dòng)菜單))+“\n”如果為True:choice=input(prompt)try:name,fun=自動(dòng)菜單[int(choice)]除了value錯(cuò)誤:print('輸入的整數(shù)無(wú)效')除了indexer錯(cuò)誤:print('選項(xiàng)超出范圍')否則:如果有趣(自我):中斷@dataclassclassAccount(菜單):card:str pin:str@clasethod def generate(cls)-quot;您的卡號(hào):{自助卡}\nquot;您的PIN碼:{自身pin碼}gt;bool:print('You have successfully logout!')return True def exit(self):打。'Bye!')exit()MENU=(('exit',exit),('Balance',Balance),('logout',logout),)類BankingSystem(MENU):def\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu自助賬戶:Dict[str,Account]={}def create\u Account(self):帳戶=帳戶.生成()打。'您的卡已創(chuàng)建')帳戶.轉(zhuǎn)儲(chǔ)() 自助賬戶[賬戶卡]=帳戶定義登錄(self):對(duì)于范圍(3)中的“\”:card=input('輸入您的卡號(hào):')pin=getpass('輸入您的pin:')帳戶=self.accounts.get獲取(卡)如果賬戶為無(wú)或帳戶.pin!=pin:print('Wrong card or pin')sleep(2)else:print('You have successfully logen!')帳戶屏幕()break def exit(self)->;bool:print('Bye!')return True MENU=(('Exit',Exit),('Create an account',Create_account),('Log in a account',Log_in),)BankingSystem().screen()
是否有方法確保添加到卡號(hào)和密碼的號(hào)碼是唯一的?是在generationstage期間,還是在將它們附加到各自的數(shù)組之前?
AFAIK卡號(hào)不一定是隨機(jī)的,只是唯一的。因此,我將以順序方式生成數(shù)字,并將它們存儲(chǔ)到具有唯一約束的數(shù)據(jù)庫(kù)中。
在L中,您可以執(zhí)行SELECT MAX語(yǔ)句來(lái)檢索最大的卡號(hào)并增加范圍,但請(qǐng)注意- End
免責(zé)聲明:
本頁(yè)內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無(wú)關(guān)。本頁(yè)內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。