鱼C论坛

 找回密码
 立即注册
查看: 1578|回复: 14

[已解决]T-T

[复制链接]
发表于 2023-7-7 23:49:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 我改正的答案:
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道题,当还剩一次机会时输入*是直接结束程序,我也不知道为什么
最佳答案
2023-7-8 15:38:33
davidmou 发表于 2023-7-8 15:29
还有一个问题,就是当还剩一次机会时,i以变为了0,为什么不会在屏幕上输出密码错误,次数用完了,十五分 ...

我看到了你的问题,实际上,在你的代码中当最后一次机会(i=1)用户输入错误时,你的代码会继续执行  i -= 1 ,然后变成  i = 0 。在这之后,程序会再次进入到循环,但因为  yourinput  不等于  answer ,并且  i  已经是  0  了,所以循环条件不满足,程序会跳出循环,而没有机会执行  print("密码错误,次数用完了,十五分钟后尝试")  这一行代码。

上面我提供的修改后的代码能够处理这个问题,它会在最后一次机会输入错误后输出  密码错误,次数用完了,十五分钟后尝试 ,然后退出循环。

再次强调,当你设计一个循环的时候,需要仔细考虑你的循环退出条件和每次循环内部的逻辑,以确保它们可以正确地按照你的预期工作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-7 23:52:18 | 显示全部楼层
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但不会减少剩余的尝试次数(因为你在输入"*"的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("密码正确,进入程序")
```

这个版本的代码将只在密码错误且不包含"*"时减少尝试次数。另外,也确保了在达到尝试次数限制后将会退出循环,无论密码是否包含"*"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 23:53:24 | 显示全部楼层
isdkz 发表于 2023-7-7 23:52
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但 ...

分析:isdkz的电脑关机了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 23:55:00 | 显示全部楼层
歌者文明清理员 发表于 2023-7-7 23:53
分析:isdkz的电脑关机了

在电脑上我直接utools快捷键就可以转格式了,手机上懒得调
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 23:59:18 | 显示全部楼层
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 07:52:08 | 显示全部楼层
isdkz 发表于 2023-7-7 23:55
在电脑上我直接utools快捷键就可以转格式了,手机上懒得调

教我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 07:53:12 | 显示全部楼层

先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 07:54:31 | 显示全部楼层
isdkz 发表于 2023-7-8 07:53
先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste

链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 07:57:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 08:25:48 | 显示全部楼层
isdkz 发表于 2023-7-8 07:57
https://open.u-tools.cn/468049.html

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 08:31:41 | 显示全部楼层
isdkz 发表于 2023-7-8 07:53
先去了解一下utools这个软件,我现在电脑上都离不开utools和snipaste

utools好用,我用过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 09:44:53 | 显示全部楼层
我不太明白,你要完成的操作,我看你代码猜测您要完成的操作是:一共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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 10:45:23 | 显示全部楼层

确实好用,绝对是程序员提效利器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-8 15:29:24 | 显示全部楼层
isdkz 发表于 2023-7-7 23:52
看上去你的代码中有一个逻辑错误。当你在密码中输入"*"时,你的代码逻辑会无限地要求用户重新输入密码,但 ...

还有一个问题,就是当还剩一次机会时,i以变为了0,为什么不会在屏幕上输出密码错误,次数用完了,十五分钟后尝试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 15:38:33 | 显示全部楼层    本楼为最佳答案   
davidmou 发表于 2023-7-8 15:29
还有一个问题,就是当还剩一次机会时,i以变为了0,为什么不会在屏幕上输出密码错误,次数用完了,十五分 ...

我看到了你的问题,实际上,在你的代码中当最后一次机会(i=1)用户输入错误时,你的代码会继续执行  i -= 1 ,然后变成  i = 0 。在这之后,程序会再次进入到循环,但因为  yourinput  不等于  answer ,并且  i  已经是  0  了,所以循环条件不满足,程序会跳出循环,而没有机会执行  print("密码错误,次数用完了,十五分钟后尝试")  这一行代码。

上面我提供的修改后的代码能够处理这个问题,它会在最后一次机会输入错误后输出  密码错误,次数用完了,十五分钟后尝试 ,然后退出循环。

再次强调,当你设计一个循环的时候,需要仔细考虑你的循环退出条件和每次循环内部的逻辑,以确保它们可以正确地按照你的预期工作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表