505289859 发表于 2020-7-19 23:57:18

新手学习了新版python,自习遇到了问题,求助大神。

本人销售一名,今天入坑,0计算机基础。通过B站心血来潮学习了鱼哥的一课python入门,通过第一个的猜数字小游戏,自己做了个自习,遇到了一堆问题。



自习码(可运行):
《判断卡密对错》

import time

print('\n\n\n\n\n¥欢迎您使用中国工商银行 电子银行¥\n\n\n\n\n')

temp1 = input('请输入您的银行卡账号:')
asss = int(temp1)

if asss == 17666666666:
   print('\n\n卡号正确!请稍后。。。\n\n')
else:
   print('\n\n账号错误,请仔细核对卡号!\n\n\n')   

time.sleep(2)

temp2 = input('请输入您的银行卡密码:')
mmm = int(temp2)
int(temp2)
if mmm == 888888:
   print('\n\n密码正确!\n\n你的账户余额为8868.88元')
else:
   print('\n\n密码错误,请联系银行工作人员!')




现在想求助几个问题:

1.如何在输入密码的时候,把数字变成******号这种隐藏字符
2.如何在输入账号错误的情况下终止接下来的步骤,重复输入账号的操作,直到正确后,再进行验证密码操作,密码也是一样,
现在的问题是,就算账号输入错了,也不提示,会继续让输入密码,然后最后会一起提示。
3.如何把能进行多账户,转账操作,并且余额同时会变动。



以上问题求助各位大佬,兴趣使然,感谢传授指导。

Levin-e 发表于 2020-7-20 00:48:40

1.https://blog.csdn.net/xc_zhou/article/details/80788436,这个帖子介绍了详细的方法,适应多个平台。
2.pip install goto-statement,使用第三方的包,实现类似C语言中的goto代码跳转功能,但是不建议。或者可以写成循环的形式,很粗暴的输对密码才能跳出循环。(本人拙见,还希望别的大佬提供更优秀的方法)
3.多账户,数据更改这样的操作,可以考虑数据库,能够方便的实现你的这些要求,但是目前代码太过于简单,需要重新设计。

Twilight6 发表于 2020-7-20 00:50:56

本帖最后由 Twilight6 于 2020-7-20 01:07 编辑



1.如何在输入密码的时候,把数字变成******号这种隐藏字符?

看楼上的链接进行使用

2.如何在输入账号错误的情况下终止接下来的步骤,重复输入账号的操作,直到正确后,再进行验证密码操作,密码也是一样,
现在的问题是,就算账号输入错了,也不提示,会继续让输入密码,然后最后会一起提示。
3.如何把能进行多账户,转账操作,并且余额同时会变动。

帮你改了下整体代码,美观了许多:

1.添加判断账号长度和输入合法字符功能

2.优化 print 和 time.sleep 函数配合使用的打印效果

3.添加判断输入密码错误次数功能

4.深夜敲码不易,如果对你有帮助记得给个【最佳答案】哈~

完整代码:
import time

print('''
┌--------------------------------------┐
|                                    |
   ¥欢迎您使用中国工商银行 电子银行¥
|                                    |
└--------------------------------------┘''')

print('|\n|-请输入您的银行卡账号:', end='')
judge = True
while judge:
    temp1 = input()

    while not temp1.isdigit() or not (len(temp1) == 11):
      if not temp1.isdigit():
            temp1 = input('|--抱歉!您输入账号存在非合法字符,请重新输入:')
      else:
            temp1 = input('|--抱歉!您输入账号长度不正确,请重新输入:')

    if temp1 == '17666666666':
      print('|\n|--卡号正确!登入中,请稍后', end='')
      for i in range(6):
            time.sleep(0.35)
            print('.', end='')
      print()
    else:
      print('|\n|--账号错误,请仔细核对卡号!\n|-请重新输入您的银行卡账号:', end='')
      continue
    print('|\n|---请输入您的银行卡密码:',end='')
    count = 5
    while True:
      temp2 = input()

      if temp2 == '888888':
            print('|\n|---密码正确!正在获取用户数据,请稍后', end='')
            for i in range(6):
                time.sleep(0.35)
                print('.', end='')
            print()
            print('|---你的账户余额为8868.88元')
            judge = False
            break
      else:
            count -= 1
            if count != 0:
                print('|\n|---密码错误,您还有%d次机会,若多次输入错误,账号将被暂时冻结!\n|\n|---请再次输入您的银行卡号:'%count,end='')
            else:
                print('|\n|---用户密码多次输入错误,该银行卡号已经冻结,如有问题,请联系银行工作人员!')
                judge = False
                break

print('|\n|---正在退出程序',end='')
for i in range(6):
    time.sleep(0.35)
    print('.', end='')
print('\n|\n|---感谢使用中国工商银行查询系统!祝您生活愉快~再见!')


505289859 发表于 2020-7-20 04:18:55

Twilight6 发表于 2020-7-20 00:50
看楼上的链接进行使用




end=’   ’这个代表什么意思

Twilight6 发表于 2020-7-20 07:56:26

505289859 发表于 2020-7-20 04:18
end=’   ’这个代表什么意思



end 是 print 函数的默认参数,而且是在 print 内容打印结束后,自动追加打印一个 end ,他的默认值为 end ='\n' 换行符号 我们用end="" 覆盖他的默认值 print 函数就不会自动换行

赵小莫是只猫 发表于 2020-7-20 23:39:48

学到了{:10_254:}

pa1009pa 发表于 2020-7-21 01:35:26

知識+1 謝謝

石泊远 发表于 2020-7-21 23:52:51

本帖最后由 石泊远 于 2020-11-24 23:24 编辑

啊,终于写完啦
改变了一下3L大佬的

import time as t
import random as r

def goto():
    print()
    for j in range(3):
      for i in range(10):
            print('.',end='')
            t.sleep(0.1)
      print()

def error():
    while True:
      print('error',end='')

zh = '1766666666666666'
mm = '888888888888888A' #16
money = r.randint(100,100000)
cw = 0
yesnodl = True

print('''
╔═════════████═════════╗
║                                          ║
║   ¥欢迎您使用中国工商银行电子银行¥   ║
║                                          ║
╚═════════████═════════╝
''')

t.sleep(1)

while yesnodl:
    cinzh = input('请输入您的账号:')

    while not cinzh.isdigit() or (len(cinzh) > 17 or len(cinzh) < 15):
      if not cinzh.isdigit():
            cw+=1
            cinzh = input('|--抱歉!您输入账号存在非合法字符,请重新输入:')
      elif (len(cinzh) > 17) or (len(cinzh) < 15):
            cw+=1
            cinzh = input('|--抱歉!您输入账号长度错误,请重新输入:')

    if cw <= 10:
      if cinzh == '1766666666666666':
            print('|\n|--卡号正确!登入中,请稍后', end='')
            goto()
      else:
            print('|\n|--账号错误,请仔细核对卡号!\n|-请重新输入您的银行卡账号:', end='')
            continue
      cinmm = input('|\n|---请输入您的银行卡密码:')
      mmcw = 5
      while True:
            if cinmm == '888888888888888A':
                print('|\n|---密码正确!正在获取用户数据,请稍后', end='')
                goto()
                print()
                print(f'|---你的账户余额为{money}元')
                yesnodl = False
                break;
            else:
                mmcw -= 1
                if mmcw != 0:
                  print(f'|\n|---密码错误,您还有{mmcw}次机会,若多次输入错误,账号将被暂时冻结!\n|\n|---请再次输入您的银行卡号:',end='')
                else:
                  print('|\n|---用户密码多次输入错误,该银行卡号已经冻结,如有问题,请联系银行工作人员!')
                  judge = False
                  break
               
    else:
      print('错误次数过多,退出')
      goto()
      break
      
print('|\n|---正在退出程序',end='')
goto()
print('\n|\n|---感谢使用中国工商银行查询系统!祝您生活愉快~再见!')

Tip0 发表于 2020-7-23 17:31:02

学习了

zhiweng07 发表于 2020-7-23 20:05:26

头脑风暴,获益匪浅
页: [1]
查看完整版本: 新手学习了新版python,自习遇到了问题,求助大神。