鱼C论坛

 找回密码
 立即注册
查看: 2409|回复: 10

[已解决]Python 009讲 动动手作业 输入三次密码程序提问!!!

[复制链接]
发表于 2020-3-10 20:44:14 | 显示全部楼层 |阅读模式

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

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

x
以下是给出的正确答案:
count = 3
password = 'FishC.com'

while count:   很疑惑这里为什么不是 while counts>0:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!',end=' '为什么要有个空格end)
        continue
    else:
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')   
    count -= 1
以下是我的自己写的:
counts=3
password = "FishC.com"
answer=input("请输入密码:")
while counts>0:
        if password==answer:
                print("密码正确!")
                break
        elif "*" in password:
                print("输入正确形式密码,您还有",counts,"次机会!")
               input("请输入密码:") 在这里报错了
                continue
        else:
                print("密码输入错误,你还有",counts-1,"次机会!")
                input("请输入密码:")
        counts=counts-1 这一排也给我报错了

最佳答案
2020-3-10 20:57:32
一个个来,
1、while、if后面跟的判断只要不是为空和为0,都判断为True,反之判断为False,当然,你一定要加上>0也是可以的。
2、也可以不要有个空格,如果end = ‘’(空字符)或end = ' ',那么接下来打印‘请输入密码:’就会不换行出现在同一行上,如果不加end参数,就会打印在下一行。
3、缩进明显不统一,如果你在IDLE界面写代码并且回车不会自动缩进的话,那么一个Tab键是一个缩进,统一缩进在Python里面是最重要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 20:57:32 | 显示全部楼层    本楼为最佳答案   
一个个来,
1、while、if后面跟的判断只要不是为空和为0,都判断为True,反之判断为False,当然,你一定要加上>0也是可以的。
2、也可以不要有个空格,如果end = ‘’(空字符)或end = ' ',那么接下来打印‘请输入密码:’就会不换行出现在同一行上,如果不加end参数,就会打印在下一行。
3、缩进明显不统一,如果你在IDLE界面写代码并且回车不会自动缩进的话,那么一个Tab键是一个缩进,统一缩进在Python里面是最重要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 20:58:06 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-3-10 21:02 编辑

1,简写模式,while count就是count不为False(0)
2,输入密码的提示通常都是和输入框在一起的,你想换行也可以  https://fishc.com.cn/thread-159045-1-1.html
3,缩进问题
counts=3
password = "FishC.com"
answer=input("请输入密码:")
while counts>0:
        if password==answer:
            print("密码正确!")
            break
        elif "*" in password:
            print("输入正确形式密码,您还有",counts,"次机会!")
            password = input("请输入密码:")
            continue
        else:
            counts-=1
            print("密码输入错误,你还有",counts,"次机会!")
            password = input("请输入密码:")
            continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 21:00:12 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-10 21:08 编辑
counts , c = 3 , 0
password = "FishC.com"
while c < counts:
    answer = input("请输入密码:") . strip()
    if len(answer):
        if password == answer:
            print("密码正确!")
            break
        elif '*' in answer:
            print("输入正确形式密码,您还有" , counts - c , "次机会!\n")
        else:
            c += 1
            if(c < counts):
                print("密码错误,你还有" , counts - c , "次机会!\n")
    else:
        break
else:
    print('很遗憾,' , counts , '次机会已经用完\n')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-10 21:42:33 | 显示全部楼层
Hoiste 发表于 2020-3-10 20:57
一个个来,
1、while、if后面跟的判断只要不是为空和为0,都判断为True,反之判断为False,当然,你一定要 ...

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

使用道具 举报

 楼主| 发表于 2020-3-10 21:48:00 | 显示全部楼层
qiuyouzhi 发表于 2020-3-10 20:58
1,简写模式,while count就是count不为False(0)
2,输入密码的提示通常都是和输入框在一起的,你想换行 ...

看了你写的然后我自己又去写了遍,按了f5运行后,最后只有零次机会的时候,系统还是让我输入了,就是说我有四次输入机会,是哪里出了问题了呀?麻烦你帮我看看我写的代码可以吗
counts=3
password = "FishC.com"
answer = input("请输入密码:")
while counts > 0:
        if password == answer:
                print("密码正确,进入程序...")
                break
        elif "*" in answer:
                print("密码中不能含有*号!您还有",counts,"次机会!")
                answer=input("请输入密码:")
                continue
        else:
                print("密码输入错误!您还有",counts-1,"次机会!")
                answer=input("请输入密码:")
        counts=counts-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 21:53:04 | 显示全部楼层
机会不是三次是因为你的代码结构不合理,当第一次输错的时候,你马上就让用户再次输入,然后在counts -1,所以在第一次输错的时候,counts从3到2过程中你输入了两次密码,其实只要把结构优化一下就可以了。答案的代码和四楼的代码你可以看下别人是怎么避免这个问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 21:53:33 | 显示全部楼层
13708301611 发表于 2020-3-10 21:48
看了你写的然后我自己又去写了遍,按了f5运行后,最后只有零次机会的时候,系统还是让我输入了,就是说我 ...

counts-1并不代表counts这个值减了1,只是打印出count-1的值
改成这样就好了
counts=3
password = "FishC.com"
answer = input("请输入密码:")
while counts > 0:
    if password == answer:
        print("密码正确,进入程序...")
        break
    elif "*" in answer:
        print("密码中不能含有*号!您还有",counts,"次机会!")
        answer=input("请输入密码:")
        continue
    else:
        counts -= 1
        print("密码输入错误!您还有",counts,"次机会!")
        answer=input("请输入密码:")
        continue
    counts -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 22:22:36 | 显示全部楼层
Hoiste 发表于 2020-3-10 21:53
机会不是三次是因为你的代码结构不合理,当第一次输错的时候,你马上就让用户再次输入,然后在counts -1, ...

四楼的答案有几排都看不懂(我真的是新新新新手那种程度。。)然后看了好久答案也没看出来个什么。我应该就是在最后else 哪里出问题了对吧?你可以帮我看看怎样优化吗
else:
                print("密码输入错误!您还有",counts-1,"次机会!")
                answer=input("请输入密码:")
counts=counts-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 11:03:54 | 显示全部楼层
13708301611 发表于 2020-3-10 22:22
四楼的答案有几排都看不懂(我真的是新新新新手那种程度。。)然后看了好久答案也没看出来个什么。我应该 ...

看漏了最下面那个报错,else里面的input()没有返回给password,这样你永远无法改变password的值,一旦输入错误,后面无论如何输入都会跑完三遍都是错误。
至于前面说的结构问题,最简单的方法就是根据我说的思路走,让counts在3到2过程中只输入一次,出于习惯建议把counts = counts - 1改成counts -= 1,把counts - 1的这个步骤放在else下面第一行,也就是:
else:
    counts -= 1
    print('密码输入错误,你还有‘,counts,’次机会!')
    password = input('请输入密码:')
那么程序的思路就是第一次输入错误了,机会变为两次,打印还剩两次机会,然后再要求输入密码,进入下一次循环判断。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 07:35:18 | 显示全部楼层
想问一下大家,我自己写代码的时候看着和答案一模一样,
可是最后出来的机会 会一直倒数,比如说-1次机会,-2次机会....
好像没有停止一样。
请问是哪里出错了? 谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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