Python 类与对象应用 —— 银行管理系统(双系统)

复制代码
  1 # 银行管理系统
  2 
  3 
  4 """
  5 思考:
  6     1.怎么随机产生不重复的6位数字?
  7     2.怎么存储银行卡信息?
  8     3.怎么引用自己写的模块?
  9 
 10 介绍:
 11     从早期的钱庄到现如今的银行,金融行业在不断地变革,随着科技的发展,计算机的普及,
 12     计算机技术在金融行业得到了广泛的应用。
 13     银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等功能的管理系统。
 14 
 15     操作:本程序有两个系统,分别是管理员系统和普通用户系统,
 16     初始管理员账户:123456,密码:123456
 17 
 18 知识点:
 19     1.类和对象的使用:类的定义、属性和方法的调用、类方法和静态方法的封装和调用
 20     2.字典的使用;本程序是有字典来存储数据的,包括字典的增、删、改、查、遍历
 21     3.文件模块引用:我把本程序和之前写的程序(文本进度条)进行调用
 22     4.循环/嵌套循环语句:while/ for
 23     5.条件/嵌套条件语句:if/ elif/ else
 24     6.跳转语句:break/ continue
 25     7.函数封装:把单一重复的代码封装成一个函数
 26     8.旗帜的使用:方便我们跳出多层循环体
 27 
 28 不足(待改善):
 29     1.本程序有一个bug还没改善:在普通用户登录操作输入金额时,不能输入字符,否则会报错
 30 
 31 """
 32 
 33 
 34 # 定义一个类     ===================================================================
 35 class Info:
 36 
 37     # 定义一个字典,用于存储银行卡信息
 38     __info = {'123456': ['周华', '(空)', '(空)', 0, '123456', '管理员']}
 39 
 40     # 管理员账户
 41     admin_account = '123456'     # 缺点:不是私有属性,可以被外部调用
 42 
 43     # 随机生成6位数账号(不重复)    ==================================================
 44     @staticmethod
 45     def __random_num(min=100000, max=999999):
 46 
 47         from random import randint              # 导入random模块的randomint函数
 48         Info.num = str(randint(min, max))       # 随机生成一个(100000-999999)的账户
 49 
 50         if Info.__info == dict():               # 判断字典是否为空
 51             return Info.num                     # 返回随机产生的账户
 52 
 53         else:
 54             # 调用账户查找函数,判断现在生成的随机账户是否与字典中的账户相同(保证唯一性)
 55             if not Info.find_account(find=Info.num):        # 如果不相同
 56                 return Info.num                             # 那就返回这个账户
 57 
 58             else:                                           # 如果有重复
 59                 Info.__random_num()                         # 那就在重新产生一个账户(递归函数)
 60                 return Info.num                             # 返回账户
 61 
 62     # 账号开户  ====================================================================
 63     @classmethod
 64     def create_account(cls, name='(空)', id_card='(空)', phone_num='(空)', money=0, password='(空)', state='(空)'):
 65 
 66         Info.account = Info.__random_num()  # 调用私有方法,随机生成6位数账户,并赋值
 67 
 68         # 把账户信息添加到字典中(字典添加元素),注意不可以使用update()添加元素
 69         Info.__info[Info.account] = [name, id_card, phone_num, money, password, state]
 70 
 71         return Info.account         # 返回新生成的账户
 72 
 73     # 查找账户  ===================================================================
 74     @staticmethod
 75     def find_account(find, container=None):
 76         if not container:                       # 判断传入的container是否为None
 77             container = Info.__info             # 如果为None,那就赋值
 78 
 79         for i in container:         # 字典遍历查找账户
 80             if find == i:           # 判断是否存在此账户
 81                 return True         # 如果存在此账户,那就返回True
 82 
 83         return None                 # 此返回值是:在字典中不存在此账户,返回None
 84 
 85     # 查找密码  ===================================================================
 86     @classmethod
 87     def find_password(cls, account, password):
 88         # 先判断账号是否存在
 89         if not Info.find_account(find=account, container=Info.__info):
 90             return None                             # 账户错误
 91 
 92         # 再判断此账号的密码是否正确
 93         if password == Info.__info[account][4]:
 94             return True                             # 账户和密码正确
 95 
 96         return False                                # 账户正确,密码错误
 97 
 98     # 账户锁定
 99     @staticmethod
100     def account_lock(account):
101         # 在账户信息里添加旗帜(说明此账户已被锁定)
102         Info.__info[account][5] = '已锁定'
103 
104     # 账户解锁
105     @staticmethod
106     def account_unlock(account):
107         Info.__info[account][5] = '(空)'
108 
109     # 判断账户是否被锁定
110     @staticmethod
111     def whether_account_lock(account):
112 
113         # 判断账户是否被锁定
114         if '已锁定' == Info.__info[account][-1]:
115             return False
116 
117         return True
118 
119     # 账户销户  ===================================================================
120     @staticmethod
121     def remove_account(remove):
122 
123         # 判断此账户是否存在
124         if Info.find_account(remove):
125 
126             Info.__info.pop(remove)     # 如果存在,就删除此账户
127             return True                 # 删除此账户并返回True
128 
129         return None                     # 如果此账户不存在,就返回False
130 
131     # 打印账户  ===================================================================
132     @staticmethod
133     def output_account(account, scope=None):
134         # 遍历打印账户信息
135         for i in Info.__info:
136 
137             # 判断传入的参数是否为‘all’
138             if scope == 'all':
139                 account = i             # 如果是‘all’,就赋值
140 
141             # 打印账户信息
142             if account == i:
143                 print(f'账户:{i}\t密码:{Info.__info[i][4]}', end='\t')
144                 print(f'余额:{Info.__info[i][3]}¥\t姓名:{Info.__info[i][0]}', end='\t')
145                 print(f'身份证:{Info.__info[i][1]}\t手机号:{Info.__info[i][2]}\t状态:{Info.__info[i][5]}')
146 
147     # 修改普通账户信息    ==========================================================
148     @staticmethod
149     def change_account(account, position, info):
150         Info.__info[account][position] = info       # 索引赋值
151 
152     # 修改管理员账号   =============================================================
153     @staticmethod
154     def change_admin_account(account, new_account):
155 
156         # 把新的管理员账户保存进系统,(因为字典的特点是不可重复,所以键相同,就覆盖,如果键不同,就赋值产生新的元素)
157         Info.__info[new_account] = Info.__info[account]
158 
159         # 如果键不同,就删除原管理员账号
160         if new_account != account:
161             Info.__info.pop(account)
162 
163         # 把新账户啊设置成管理员
164         Info.admin_account = new_account
165 
166     # 删库跑路  ===================================================================
167     @staticmethod
168     def clear_account():
169         buf = Info.__info[Info.admin_account]       # 管理员账户保存
170         Info.__info.clear()                         # 清空系统账户信息
171         Info.__info[Info.admin_account] = buf       # 复原管理员账户
172 
173         # 打印加载进度条
174         from loading import show_load
175         show_load(0.5)
176 
177     # 打印普通账户信息    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
178     @staticmethod
179     def output_info(account):
180         print(f'账户:{account}\t姓名:{Info.__info[account][0]}\t余额:{Info.__info[account][3]}¥')
181 
182     # 账户存款  ====================================================================
183     @staticmethod
184     def user_depo(account, money):
185         Info.__info[account][3] += money
186 
187     # 账户取款  ====================================================================
188     @staticmethod
189     def user_withdrawal(account, money):
190         Info.__info[account][3] -= money
191 
192     # 外部调用私有属性接口    ========================================================
193     @staticmethod
194     def user_money(account):
195         return Info.__info[account][3]
196 
197 
198 # 定义一个菜单功能实现类(管理员)
199 class Realize:
200 
201     # 打印标题  ===================================================================
202     @staticmethod
203     def show_title(info='', num=9, num1=0):
204         print(' ' * num1 + '=' * num + info + '=' * num)  # 字符串拼接
205 
206     # 管理员菜单打印  ==============================================================
207     @staticmethod
208     def admin_menu():
209         Realize.show_title(info='银行管理系统(管理员)', num=4)
210         print('1.账号开户\t\t2.账户销户')
211         print('3.账户锁定\t\t4.账户解锁')
212         print('5.账户查询\t\t6.账户修改')
213         print('7.删库跑路\t\t0.退卡')
214 
215     # 输入编号(选择菜单功能)  ======================================================
216     @staticmethod
217     def input_num(info=''):
218         print(info, end='')
219         return input()
220 
221     # 判断账户是否存在  ============================================================
222     @staticmethod
223     def account_whether_exist(info):
224         while True:
225             account = input(info)
226 
227             # 如果账户存在
228             if Info.find_account(account):
229                 return account
230 
231             # 退出
232             elif account == 'q':
233                 Realize.show_title(info='返回菜单')
234                 return False
235 
236             print(f'账户:{account}不存在!(返回:q)')
237 
238     # 选择确认  ===================================================================
239     @staticmethod
240     def option_affirm(account, info, num=9, num1=0):
241         message = f'请确认是否对账户:{account},进行{info}(Y/N):'  # 字符串拼接
242 
243         while True:
244             buf = input(message)
245 
246             # 确定
247             if buf == 'y' or buf == 'Y':
248                 Realize.show_title(info=f'{info}成功', num=num, num1=num1)
249                 return True
250 
251             # 反悔
252             elif buf == 'n' or buf == 'N':
253                 print(f'账户:{account},{info}失败!')
254                 return False
255 
256             # 输入有误
257             print('输入有误!请输入字母:Y/N')
258 
259     # 账号开户  ===================================================================
260     @staticmethod
261     def set_up_account():
262         # 输入开户信息
263         Realize.show_title(info='账号开户')
264         name = input('请输入您的姓名:')
265         id_card = input('请输入您的身份证:')
266         phone_num = input('请输入您的手机号码:')
267         password = input('请设置您的账户密码:')
268 
269         # 保存账户信息
270         account = Info.create_account(name=name, id_card=id_card, phone_num=phone_num, password=password)
271 
272         # 打印账户信息
273         print(f'账户:{account}\t密码:{password}\t姓名:{name}\t余额:0元')
274         Realize.show_title(info='开户成功')
275 
276     # 账户销户  ===================================================================
277     @staticmethod
278     def del_account():
279         Realize.show_title(info='账户销户')
280 
281         # 如果账户不存在
282         account = Realize.account_whether_exist('请输入需要注销的账户:')
283         if not account:
284             return
285 
286         Info.output_account(account)                        # 打印账户信息
287 
288         # 管理员账户无法注销
289         if account == Info.admin_account:
290             print(f'{account}为管理员账户,无法注销!')
291             return
292 
293         # 选择确认销户
294         if Realize.option_affirm(account=account, info='销户'):
295             Info.remove_account(account)        # 销户
296 
297     # 账户锁定  ===================================================================
298     @staticmethod
299     def frozen_account():
300         Realize.show_title(info='账户锁定')
301 
302         # 如果账户不存在
303         account = Realize.account_whether_exist('请输入需要锁定的账户:')
304         if not account:
305             return
306 
307         # 管理员账户无法锁定
308         if account == Info.admin_account:
309             print(f'{account}为管理员账户,无法锁定!')
310             return
311 
312         # 如果账户已锁定
313         if not Info.whether_account_lock(account):
314             print(f'账户:{account},已被锁定!')
315             return
316 
317         # 锁定选择确认
318         if Realize.option_affirm(account=account, info='锁定'):
319             # 账户锁定
320             Info.account_lock(account)
321 
322     # 账户解锁  ===================================================================
323     @staticmethod
324     def account_unlock():
325         Realize.show_title('账户解锁')
326 
327         # 如果账户不存在
328         account = Realize.account_whether_exist('请输入需要解锁的账户:')
329         if not account:
330             return
331 
332         # 如果没有锁定
333         if Info.whether_account_lock(account):
334             print(f'账户:{account},未锁定,无需解锁!')
335             return
336 
337         # 如果选择解锁
338         if Realize.option_affirm(account=account, info='解锁'):
339             Info.account_unlock(account)        # 账户解锁
340 
341     # 账户查询  ===================================================================
342     @staticmethod
343     def find_account_info():
344         Realize.show_title('账户查询')
345 
346         # 因为这里添加了‘all’,所以要单独处理
347         while True:
348             account = input('请输入需要查询的账户(全部:all):')
349 
350             # 如果账户存在
351             if Info.find_account(account):
352                 break
353 
354             # 退出
355             elif account == 'q':
356                 Realize.show_title(info='返回菜单')
357                 return False
358 
359             # 打印全部
360             elif account == 'all' or account == 'ALL':
361                 break
362 
363             print(f'账户:{account}不存在!(返回:q)')
364 
365         # 打印系统所有账户信息
366         if account == 'all':
367             Info.output_account(account='参数无要求', scope='all')
368             return
369 
370         # 单纯打印此账户信息
371         Info.output_account(account)
372 
373     # 账户修改  ===================================================================
374     @staticmethod
375     def change_account_info():
376         Realize.show_title('账户修改')
377 
378         # 如果账户不存在
379         account = Realize.account_whether_exist('请输入需要修改的账户:')
380         if not account:
381             return
382 
383         # 管理员特殊处理
384         if account == Info.admin_account:
385             while True:
386                 new_account = input('请输入新的账号:')
387 
388                 # 如果修改成功
389                 if Realize.option_affirm(account=account, info='账号修改', num=7, num1=1):
390                     # 确认修改后赋值
391                     Info.change_admin_account(account=account, new_account=new_account)
392                     # 打印修改后账户信息
393                     Info.output_account(new_account)
394                     # 赋值
395                     account = new_account
396                     break
397 
398         # 账户信息修改(可以封装到函数里)
399         while True:
400             # 打印账户信息修改菜单
401             Realize.show_title('账户修改')
402             print('1.修改姓名\t  2.修改身份证')
403             print('3.修改密码\t  4.修改手机号')
404 
405             # 选择菜单功能
406             num = Realize.input_num(f'请账户{account}选择修改内容:')
407 
408             # 1.修改姓名
409             if num == '1':
410                 new_name = input('请输入新的姓名:')
411                 # 参数传参赋值
412                 info = '姓名修改'
413                 index = 0
414                 data = new_name
415                 num = 7
416                 space = 1
417 
418             # 2.修改身份证
419             elif num == '2':
420                 data = input('请输入新的身份证:')
421                 # 参数传参赋值
422                 info = '身份证修改'
423                 index = 1
424                 num = 6
425                 space = 1
426 
427             # 3.修改密码
428             elif num == '3':
429                 data = input('请输入新的密码:')
430                 # 参数传参赋值
431                 info = '密码修改'
432                 index = 4
433                 num = 7
434                 space = 1
435 
436             # 4.修改手机号
437             elif num == '4':
438                 data = input('请输入新的手机号:')
439                 # 参数传参赋值
440                 info = '手机号修改'
441                 index = 2
442                 num = 6
443                 space = 1
444 
445             # 返回
446             elif num == 'q':
447                 break
448 
449             # 其他
450             else:
451                 print('编号输入有误!(退出:q)')
452                 continue
453 
454             # 如果修改失败
455             if not Realize.option_affirm(account=account, info=info, num=num, num1=space):
456                 continue
457 
458             # 修改成功后赋值
459             Info.change_account(account=account, position=index, info=data)
460             Info.output_account(account)        # 打印赋值后信息
461 
462     # 删库跑路  ===================================================================
463     @staticmethod
464     def clear_account():
465         Realize.show_title('恢复出厂')
466 
467         while True:
468             buf = input('请确认是否删库跑路(Y/N):')
469 
470             if buf == 'Y' or buf == 'y':
471                 Info.clear_account()
472                 Realize.show_title('恢复出厂')
473                 break
474 
475             elif buf == 'N' or buf == 'n':
476                 Realize.show_title('删库失败')
477                 break
478 
479             elif buf == 'q':
480                 Realize.show_title('放弃删库')
481                 break
482 
483             print('输入有误!(返回:q)')
484 
485     # 登录界面打印    ==============================================================
486     @staticmethod
487     def interface():
488 
489         while True:
490             Realize.show_title(info='账户登录')  # 打印标题
491             whether = input('请问您是否有账户(Y/N):')
492 
493             if whether == 'N' or whether == 'n':
494                 print('很遗憾您还没有账户!!!')
495                 print('快来找管理员开户吧!')
496                 print('管理员账户:123456')
497                 print('管理员密码:123456')
498                 continue
499 
500             elif whether == 'Y' or whether == 'y':
501 
502                 account = input('请输入账户:')  # 输入账户
503 
504                 # 先判断账户是否正确
505                 if not Info.find_account(find=account):
506                     error_count = 1  # 记录输入错误的次数
507 
508                     while True:
509                         print('账号输入错误!(返回:q)')  # 打印错误提示语
510                         account = input('请重新输入账户:')  # 重新输入账户
511 
512                         # 判断系统里是否有此账户
513                         if Info.find_account(find=account):
514                             break  # 如果有就停止输入
515 
516                         # 判断输入的次数能否被4整除
517                         if error_count % 4 == 0:
518                             buf = f'您已经输入错误{error_count + 1}次!'   # 如果能被4整除,就打印提示语
519                             Realize.show_title(info=buf, num=4)         # 调用函数打印打印提示语
520 
521                         # 判断是否输入的账户是字符‘q’
522                         if account == 'q':
523                             break  # 如果为真,就跳出循环输入
524 
525                         error_count += 1  # 输入错误数累加
526 
527                 # 判断输入的账户是否为字符‘q’
528                 if account == 'q':
529                     continue  # 如果为真,就回到本次循环的开始
530 
531                 # 判断账户是否被锁定
532                 if not Info.whether_account_lock(account):
533                     print(f'此账户:{account} 已被锁定!\n请及时找管理员处理!')
534                     continue
535 
536                 password = input('请输入密码:')  # 输入密码
537 
538                 # 只有三次机会
539                 for i in range(4):
540 
541                     # 再判断密码是否正确
542                     if Info.find_password(account=account, password=password):
543                         return account  # 如果正确,就返回账户
544 
545                     else:
546                         error = '输入密码错误!'
547 
548                     # 打印提示语
549                     if i < 3:
550                         print(error, end='')  # 打印输入错误提示
551                         print(f'还有{3 - i}次机会')
552                         password = input('请重新输入密码:')
553 
554                 # 密码全输错了(账户锁定,管理员除外)
555                 if account != Info.admin_account:
556                     print(f'此账户:{account} 已被锁定!\n请及时找管理员处理!')
557 
558                     Info.account_lock(account)  # 调用静态方法,说明此账户已被锁定
559 
560     # 选择菜单功能  ================================================================
561     @staticmethod
562     def select_function(num):
563 
564         # 1.账号开户
565         if num == '1':
566             Realize.set_up_account()        # 调用静态方法开户
567 
568         # 2.账号销户
569         elif num == '2':
570             Realize.del_account()           # 调用静态方法
571 
572         # 3.账户锁定
573         elif num == '3':
574             Realize.frozen_account()        # 调用静态方法
575 
576         # 4.账户解锁
577         elif num == '4':
578             Realize.account_unlock()        # 调用静态方法
579 
580         # 5.账户查询
581         elif num == '5':
582             Realize.find_account_info()     # 调用静态方法
583 
584         # 6.账户修改
585         elif num == '6':
586             Realize.change_account_info()   # 调用静态方法
587 
588         # 7.删库跑路
589         elif num == '7':
590             Realize.clear_account()         # 调用静态方法
591 
592 
593 # 定义一个普通账户菜单功能实现类(普通用户)
594 class User:
595 
596     # 打印菜单  ====================================================================
597     @staticmethod
598     def user_menu():
599         Realize.show_title(info='银行管理系统(用户)', num=5)
600         print('1.取款\t\t\t\t2.余额')
601         print('3.存款\t\t\t\t4.转账')
602         print('0.退卡')
603 
604     # 存款    =====================================================================
605     @staticmethod
606     def deposit(account):
607         Realize.show_title('用户存款')
608 
609         while True:
610             money = float(input('请输入存款金额:'))       # 理想状态,如果输入负数和字符串会出现bug
611             if money < 0:
612                 print('不能输入负数')
613                 continue
614 
615             break
616 
617         Info.user_depo(account=account, money=money)    # 金额增加
618         Info.output_info(account)                       # 打印账户信息
619 
620         # 如果放弃存款
621         if not Realize.option_affirm(account=account, info='存款'):
622             Info.user_withdrawal(account=account, money=money)     # 金额减少
623             return
624 
625     # 取款    =====================================================================
626     @staticmethod
627     def withdrawal(account):
628         Realize.show_title('用户取款')
629 
630         while True:
631             Info.output_info(account)                # 打印账户信息
632             money = float(input('请输入取款金额:'))    # 理想状态,如果输入负数和字符串会出现bug
633 
634             if money < 0:
635                 print('不能输入负数')
636                 continue
637 
638             # 如果银行卡里的余额<取款余额
639             elif Info.user_money(account) < money:
640                 print('已超出最大取款金额!')
641                 continue
642 
643             break
644 
645         # 如果放弃存款
646         if not Realize.option_affirm(account=account, info='取款'):
647             return
648 
649         Info.user_withdrawal(account=account, money=money)  # 金额减少
650 
651     # 转账    =====================================================================
652     @staticmethod
653     def transfer(account):
654 
655         Realize.show_title('账户转账')
656 
657         # 被转账账户真是存在,且不是管理员
658         while True:
659             new_account = input('请输入转账的账户:')
660 
661             # 如果被转账账户存在
662             if Info.find_account(new_account):
663                 break
664 
665             # 返回上一级
666             elif new_account == 'q':
667                 Realize.show_title('转账失败')
668                 return
669 
670             # 不能对管理员转账
671             elif new_account == Info.admin_account:
672                 print('无法给管理员账户转账!')
673                 continue
674 
675             print('此账户不存在,(返回:q)')
676 
677         # 输入合适的转账金额
678         while True:
679             Info.output_info(account)  # 打印账户信息
680 
681             # 输入转账金额
682             money = float(input('请输入转账金额:'))
683 
684             if money < 0:
685                 print('不能输入负数')
686                 continue
687 
688             # 如果银行卡里的余额<取款余额
689             elif Info.user_money(account) < money:
690                 print('已超出最大取款金额!')
691                 continue
692 
693             break
694 
695         # 如果放弃转账
696         if not Realize.option_affirm(account=account, info='转账'):
697             return
698 
699         # 转账成功
700         Info.user_withdrawal(account=account, money=money)  # 金额减少
701         Info.user_depo(account=new_account, money=money)    # 金额增加
702 
703     # 菜单功能实现    ===============================================================
704     @staticmethod
705     def option_function(num, account):
706         # 1.取款
707         if num == '1':
708             User.withdrawal(account)
709 
710         # 2.余额
711         elif num == '2':
712             Realize.show_title('显示余额')
713             Info.output_info(account)
714 
715         # 3.存款
716         elif num == '3':
717             User.deposit(account)
718 
719         # 4.转账
720         elif num == '4':
721             User.transfer(account)
722 
723 
724 # 功能实现(等价于C语言的主函数)   ====================================================
725 while True:
726 
727     flag_break = 0                      # 跳出循环旗帜
728 
729     account = Realize.interface()       # 判断是否有账户,并赋值
730 
731     while not False:
732 
733         if flag_break == 1:             # 跳出两层循环
734             break
735 
736         # 如果被锁定
737         if not Info.whether_account_lock(account):
738             print(f'此账户:{account} 已被锁定!\n请及时找管理员处理!')
739             break
740 
741         # 打印加载进度条
742         from loading import show_load
743         show_load()
744 
745         # 如果是管理员账户登录
746         if account == Info.admin_account:
747 
748             while True:
749                 Realize.admin_menu()                        # 打印管理员菜单
750                 num = Realize.input_num('请管理员选择功能:')    # 选择功能
751 
752                 if num == '0':
753                     flag_break = 1          # 跳出两层循环旗帜
754                     Realize.show_title(info='已退出管理员管理系统', num=4)
755                     break
756 
757                 Realize.select_function(num)        # 菜单功能实现
758 
759         # 普通账户登录
760         else:
761             while True:
762                 User.user_menu()  # 打印用户菜单
763                 num = Realize.input_num(f'请[{account}]选择功能:')  # 选择功能
764 
765                 if num == '0':
766                     flag_break = 1  # 跳出两层循环旗帜
767                     Realize.show_title(info='已退出银行管理系统', num=5)
768                     break
769 
770                 User.option_function(num=num, account=account)  # 菜单功能实现
复制代码

loading.py 文本进度条

复制代码
 1 # 文本下载进度条
 2 
 3 """
 4 知识点:
 5     1、time 模块使用
 6     2、回到本行首位置'\r'与 替换本行末尾换行符end=''
 7     3、显示百分号
 8     4、字符串运算,只能用加法和乘法
 9     5、while 循环使用
10 """
11 
12 
13 def show_load(speed=0.1):
14 
15     import time  # 导入 time模块
16 
17     # 变量定义
18     i = 1
19     a = '*'
20     # b = '.'
21 
22     start = '='*10 + '加载中' + '='*10     # 字符串拼接
23     finish = '='*9 + '加载完成' + '='*9
24 
25     # 打印开始下载
26     # print(start)
27 
28     while True:
29 
30         # 字符串拼接
31         progress_bar = '[{}{}{:.0%}]'.format(a * i, '.' * (19 - i), (i * 100 / 19) / 100)
32 
33         # 打印进度条
34         print('\r' + progress_bar, end='')
35 
36         # 循环结束条件
37         if i >= 19:
38             break  # 跳出循环
39 
40         i += 1  # 循环累加
41 
42         time.sleep(speed)  # 等待0.5秒
43 
44     # 打印下载完成
45     # print('\n' + finish)
46 
47     print()
复制代码

运行结果;

 

posted @   周华2022  阅读(1137)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示