13708301611 发表于 2020-3-10 20:44:14

Python 009讲 动动手作业 输入三次密码程序提问!!!

以下是给出的正确答案:
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 这一排也给我报错了

Hoiste 发表于 2020-3-10 20:57:32

一个个来,
1、while、if后面跟的判断只要不是为空和为0,都判断为True,反之判断为False,当然,你一定要加上>0也是可以的。
2、也可以不要有个空格,如果end = ‘’(空字符)或end = ' ',那么接下来打印‘请输入密码:’就会不换行出现在同一行上,如果不加end参数,就会打印在下一行。
3、缩进明显不统一,如果你在IDLE界面写代码并且回车不会自动缩进的话,那么一个Tab键是一个缩进,统一缩进在Python里面是最重要的。

qiuyouzhi 发表于 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

jackz007 发表于 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')

13708301611 发表于 2020-3-10 21:42:33

Hoiste 发表于 2020-3-10 20:57
一个个来,
1、while、if后面跟的判断只要不是为空和为0,都判断为True,反之判断为False,当然,你一定要 ...

谢谢了!

13708301611 发表于 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

Hoiste 发表于 2020-3-10 21:53:04

机会不是三次是因为你的代码结构不合理,当第一次输错的时候,你马上就让用户再次输入,然后在counts -1,所以在第一次输错的时候,counts从3到2过程中你输入了两次密码,其实只要把结构优化一下就可以了。答案的代码和四楼的代码你可以看下别人是怎么避免这个问题的

qiuyouzhi 发表于 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

13708301611 发表于 2020-3-10 22:22:36

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

四楼的答案有几排都看不懂(我真的是新新新新手那种程度。。)然后看了好久答案也没看出来个什么。我应该就是在最后else 哪里出问题了对吧?你可以帮我看看怎样优化吗{:5_100:}
else:
                print("密码输入错误!您还有",counts-1,"次机会!")
                answer=input("请输入密码:")
counts=counts-1

Hoiste 发表于 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('请输入密码:')
那么程序的思路就是第一次输入错误了,机会变为两次,打印还剩两次机会,然后再要求输入密码,进入下一次循环判断。

BULIBULIJUDIE 发表于 2020-3-21 07:35:18

想问一下大家,我自己写代码的时候看着和答案一模一样,
可是最后出来的机会 会一直倒数,比如说-1次机会,-2次机会....
好像没有停止一样。
请问是哪里出错了? 谢谢!!{:10_266:}
页: [1]
查看完整版本: Python 009讲 动动手作业 输入三次密码程序提问!!!