使用Python
b的简单银行系统背景:问候。这是我第一次尝试使用面向对象的范例(在这之前只真正使用了R),项目提示来自JetBrains学院,我目前在那里从事Python开发人员的工
解答动态
As对于初学者的OOP代码来说有点常见,它并不是特别的OOP;它是一个笨拙的包装器,包装了一系列仍然是过程性的方法。考虑尝试以下:做一个Account类按卡号将帐户存储为帐户对象的字典,而不是分开的卡号数组和密码,密码是冗余的(个人识别号),iin从不使用;删除它使显示文本菜单和调用关联函数的方便函数referencestr(input())是多余的;input已经返回带有提示字符串的stringCall input,而不是blankIt's welcome,not welcomUse f-strings for your digit formatting code不要使用randint;使用randrange,因为它更自然地表示排它最大值:不要对PIN使用randint;使用secrets模块进行加密,因为您的打印(BankingSystem().main\u welcom\u screen())没有打印任何内容,这是没有意义的,因为该函数不会返回任何内容您有一个严重的错误,现有PIN和卡号的任何组合都将允许登录;但是应该是一个特定的卡密码匹配pairy你有另一个错误,在那里调用出主屏幕返回主屏幕,所以最终你会吹你的堆栈。不要重复来,考虑一下为菜单选项添加验证考虑在无效PIN输入后添加防强制挂起不要通过常规输入获取用户的PIN,这会使PIN暴露在肩膀上;使用getpass insteadExample实现 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)(自动菜单))+“\n”如果为True:choice=input(prompt)try:name,fun=自动菜单[int(choice)]除了value错误:print('输入的整数无效')除了indexer错误:print('选项超出范围')否则:如果有趣(自我):中断@dataclassclassAccount(菜单):card:str pin:str@clasethod def generate(cls)-quot;您的卡号:{自助卡}\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):帐户=帐户.生成()打印('您的卡已创建')帐户.转储() 自助账户[账户卡]=帐户定义登录(self):对于范围(3)中的“\”:card=input('输入您的卡号:')pin=getpass('输入您的pin:')帐户=self.accounts.get获取(卡)如果账户为无或帐户.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()
是否有方法确保添加到卡号和密码的号码是唯一的?是在generationstage期间,还是在将它们附加到各自的数组之前?
AFAIK卡号不一定是随机的,只是唯一的。因此,我将以顺序方式生成数字,并将它们存储到具有唯一约束的数据库中。
在L中,您可以执行SELECT MAX语句来检索最大的卡号并增加范围,但请注意- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。