T-T
# 我改正的答案:yourinput = input("请输入密码:")
i = 2
answer = "dmDM"
while yourinput != answer:
if "*" in yourinput:
yourinput = input("密码错误,您还剩下 %d 次机会, 请重新输入:" % (i + 1))
continue
if "*" not in yourinput:
yourinput = input("密码错误,您还剩下 %d 次机会, 请重新输入:" % (i))
i -= 1
if i == 0:
print("密码错误,次数用完了,十五分钟后尝试")
break
if yourinput == answer:
print("密码正确,进入程序")
哪位鱼油能帮看一下,这是课后作业第九讲动动手第0道题,当还剩一次机会时输入*是直接结束程序,我也不知道为什么
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但不会减少剩余的尝试次数(因为你在输入"*"的if条件语句中并没有将i减少)。
另外,关于"*"输入后程序直接结束的问题,这可能是由于在while循环的判断条件中,你是根据输入是否等于答案来决定是否退出循环的。如果"*"不等于答案,那么就会一直循环,除非达到次数限制。
修改一下代码,我认为以下的代码能够满足你的要求:
```python
yourinput = input("请输入密码:")
i = 3
answer = "dmDM"
while yourinput != answer and i > 0:
if "*" in yourinput:
yourinput = input("密码错误,您还剩下 %d 次机会,请重新输入:" % (i))
else:
i -= 1
if i > 0:
yourinput = input("密码错误,您还剩下 %d 次机会,请重新输入:" % (i))
else:
print("密码错误,次数用完了,十五分钟后尝试")
break
if yourinput == answer:
print("密码正确,进入程序")
```
这个版本的代码将只在密码错误且不包含"*"时减少尝试次数。另外,也确保了在达到尝试次数限制后将会退出循环,无论密码是否包含"*"。 isdkz 发表于 2023-7-7 23:52
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但 ...
分析:isdkz的电脑关机了 歌者文明清理员 发表于 2023-7-7 23:53
分析:isdkz的电脑关机了
{:10_256:}在电脑上我直接utools快捷键就可以转格式了,手机上懒得调 isdkz 发表于 2023-7-7 23:55
在电脑上我直接utools快捷键就可以转格式了,手机上懒得调
/ set ip -v ( ping @isdkz )
/ set UAV.pos -v ip
/ UAV start shot
/ cd desktop
/ play video isdkz.mp4
{:10_256:} isdkz 发表于 2023-7-7 23:55
在电脑上我直接utools快捷键就可以转格式了,手机上懒得调
教我{:10_254:} sfqxx 发表于 2023-7-8 07:52
教我
先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste{:10_256:} isdkz 发表于 2023-7-8 07:53
先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste
链接{:10_254:} sfqxx 发表于 2023-7-8 07:54
链接
https://open.u-tools.cn/468049.html isdkz 发表于 2023-7-8 07:57
https://open.u-tools.cn/468049.html
谢谢{:10_254:} isdkz 发表于 2023-7-8 07:53
先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste
utools好用,我用过 我不太明白,你要完成的操作,我看你代码猜测您要完成的操作是:一共3次机会,当输入为*时候可以增加一次机会或保持机会次数不变,我写的是加一次机会,要是你要保证机会不变把我代码中那个i += 1删掉即可
yourinput = input("请输入密码:")
i = 2
answer = "dmDM"
while yourinput != answer:
yourinput = input("密码错误,您还剩下 %d 次机会, 请重新输入:" % (i))
if "*" in yourinput:
i += 1
elif "*" not in yourinput:
i -= 1
if yourinput == answer or i == 0:
print("密码错误,次数用完,十五分钟后尝试") if i == 0 else print("密码正确,进入程序")
break liuhongrun2022 发表于 2023-7-8 08:31
utools好用,我用过
确实好用,绝对是程序员提效利器{:5_106:} isdkz 发表于 2023-7-7 23:52
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但 ...
还有一个问题,就是当还剩一次机会时,i以变为了0,为什么不会在屏幕上输出密码错误,次数用完了,十五分钟后尝试。 davidmou 发表于 2023-7-8 15:29
还有一个问题,就是当还剩一次机会时,i以变为了0,为什么不会在屏幕上输出密码错误,次数用完了,十五分 ...
我看到了你的问题,实际上,在你的代码中当最后一次机会(i=1)用户输入错误时,你的代码会继续执行i -= 1 ,然后变成i = 0 。在这之后,程序会再次进入到循环,但因为yourinput不等于answer ,并且i已经是0了,所以循环条件不满足,程序会跳出循环,而没有机会执行print("密码错误,次数用完了,十五分钟后尝试")这一行代码。
上面我提供的修改后的代码能够处理这个问题,它会在最后一次机会输入错误后输出密码错误,次数用完了,十五分钟后尝试 ,然后退出循环。
再次强调,当你设计一个循环的时候,需要仔细考虑你的循环退出条件和每次循环内部的逻辑,以确保它们可以正确地按照你的预期工作。
页:
[1]