StudyPython_1 发表于 2021-8-6 15:46:51

设计一个验证用户密码程序,用户只有三次机会输入错误

本帖最后由 StudyPython_1 于 2021-8-6 16:30 编辑

设计一个验证用户密码程序,用户只有三次机会输入错误,其中输入*号不计入次数
give=str(input("请用户输入密码:"))
password= '655361'
time=1
while time< 3:
    if give == password:
      print("真厉害啊,猜对了!")
      break
    if "*" in give:
      print('密码不能包含*号')
      time -=1
    give=input('输错了,请重新输入密码:')
    time += 1
if time == 3:
    print('机会用完了')

不会使用continue让输入*号不计入次数,想了笨办法,这个方法还有bug,就是第一次第二次输入*,可以辨别并次数-1,但是最后一次输入的时候,就不能辨别了

感谢大家的回答,我的问题是 使用continue能退出这次的循环,但是time不计数

新手对这个continue的使用好迷茫啊,这个逻辑想了好久

青出于蓝 发表于 2021-8-6 15:57:49

问题是?

逃兵 发表于 2021-8-6 15:58:24

give=input("请用户输入密码:")
password= '655361'
time=1
while time< 3:
    if give == password:
      print("真厉害啊,猜对了!")
      break
    if "*" in give:
      give=input('密码不能包含*号,请重新输入:')
      continue
    give=input(f'输错了,您还有{3-time}次机会请重新输入密码:')
    time += 1
if time == 3:
    print('机会用完了')

大马强 发表于 2021-8-6 15:59:16

give = str(input("请用户输入密码:"))
password = '655361'
time = 1
while time < 3:
    if give == password:
      print("真厉害啊,猜对了!")
      break
    if "*" in give:
      print('密码不能包含*号')
      continue
    give = input('输错了,请重新输入密码:')
    time += 1
if time == 3:
    print('机会用完了')
continue 与break 作用都是跳出循环
但continue是跳出此次循环,break是整个循环

2012277033 发表于 2021-8-6 15:59:22

你这个是对continue和break的不理解和不熟悉,写个简单的例子来简要说明下continue和break的区别
for i in range(5):
    if i%2==0:
      print(i)
    else:
      continue
   
#这里输出的是
0
2
4
for i in range(5):
    if i%2==0:
      print(i)
    else:
      break
   
#这里输出的是
0

从两个例子我们可以知道,
当i=1的时候两个方式的处理区别
break是直接跳出循环
而continue是跳过这次继续执行

老迈 发表于 2021-8-6 16:09:27

???

StudyPython_1 发表于 2021-8-6 16:22:33

青出于蓝 发表于 2021-8-6 15:57
问题是?

哈哈,倒数第二行的

StudyPython_1 发表于 2021-8-6 16:24:14

逃兵 发表于 2021-8-6 15:58


这个答案还是把输入*号的次数计入了呀

逃兵 发表于 2021-8-6 16:25:28

StudyPython_1 发表于 2021-8-6 16:24
这个答案还是把输入*号的次数计入了呀

我自己测试了一下,不会呀
请用户输入密码:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:*
密码不能包含*号,请重新输入:1
输错了,您还有2次机会请重新输入密码:2
输错了,您还有1次机会请重新输入密码:3
机会用完了

StudyPython_1 发表于 2021-8-6 16:36:28

逃兵 发表于 2021-8-6 16:25
我自己测试了一下,不会呀

Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
请用户输入密码:12
输错了,您还有2次机会请重新输入密码:23
输错了,您还有1次机会请重新输入密码:*
机会用完了
>>>

StudyPython_1 发表于 2021-8-6 16:39:26

2012277033 发表于 2021-8-6 15:59
你这个是对continue和break的不理解和不熟悉,写个简单的例子来简要说明下continue和break的区别




这个基本的概念我是知道的,就是在真正用continue的时候,感觉有点转不过来弯,多谢啦

逃兵 发表于 2021-8-6 16:45:13

StudyPython_1 发表于 2021-8-6 16:36


大意了,我改了改逻辑
give=input("请用户输入密码:")
password= '655361'
time=3
while time:
    if give == password:
      print("真厉害啊,猜对了!")
      break
    elif "*" in give:
      give=input('密码不能包含*号,请重新输入:')
      continue
    time -= 1
    if time:
      give=input(f'输错了,您还有{time}次机会请重新输入密码:')
   
   
if time == 3:
    print('机会用完了')

StudyPython_1 发表于 2021-8-6 16:56:59

逃兵 发表于 2021-8-6 16:45
大意了,我改了改逻辑

最后一个 if time :
可以理解为 if time is True:吗

逃兵 发表于 2021-8-6 16:58:10

StudyPython_1 发表于 2021-8-6 16:56
最后一个 if time :
可以理解为 if time is True:吗

StudyPython_1 发表于 2021-8-6 17:01:31

逃兵 发表于 2021-8-6 16:58


多谢! hh

发现最后一行应该改为
if time==0

逃兵 发表于 2021-8-6 17:04:41

StudyPython_1 发表于 2021-8-6 17:01
多谢! hh

发现最后一行应该改为


if time == 1:
条件语句
只要条件为真就能运行
非零非空都为True
这里可以简写为time

页: [1]
查看完整版本: 设计一个验证用户密码程序,用户只有三次机会输入错误