athrunlike 发表于 2020-5-3 22:12:16

python第九讲课后练习的一个知识点运用求解

第九讲动动手第0题
里面有个问题点就是判断密码里是否有*
答案是'*' in passwd,这个应该是python强大语句的体现
但我想用for来实现,可是只能实现检测到*,但没法判断没有*的时候
我的编程如下
pw = 'Fish.com'
counts = 3
while counts > 0:
    userpw = input('请您输入密码:')   
    for i in userpw:
      if i == '*':
            print('密码里不能有*,您还有',counts,'次机会')
            break
      if userpw == pw:
            print('密码验证成功')
      if userpw != pw:
            print('密码错误,您还有',counts-1,'次机会')
            counts -= 1
            break
这段代码如果输入的密码开始不是*后面是*,那依然会吧机会次数-1.这是因为我在循环中只要第一个符号不是*,就执行机会次数-1的命令,而不是把整个输入密码检测完之后再确定是否执行机会次数-1命令。
但我试了很多次,不知道如何实现把整个密码检测完之后再确定输出的语句。
请问一下如何实现?

liuzhengyuan 发表于 2020-5-3 22:14:27

你要把判断密码是否正确的语句放到循环外面来
或是说用 elif 不要用 if

athrunlike 发表于 2020-5-3 22:19:31

自己想出来一个解法了

pw = 'Fish.com'
counts = 3
j = 1
while counts > 0:
    userpw = input('请您输入密码:')   
    for i in userpw:
      if i == '*':
            print('密码里不能有*,您还有',counts,'次机会')
            j = 0
            break
      else:
            j += 1
    if userpw == pw:
      print('密码验证成功')
      break
    if userpw != pw and j != 0:
      print('密码错误,您还有',counts-1,'次机会')
      counts -= 1

不过有没有大神有更简单更好的写法呢?

sunrise085 发表于 2020-5-4 07:07:20

为什么要逐个判断呢。直接用in判断有没有*就行了
pw = 'Fish.com'
counts = 3
while counts > 0:
    userpw = input('请您输入密码:')   
    if '*' in userpw:
      print('密码里不能有*,您还有',counts,'次机会')
      continue
    if userpw == pw:
      print('密码验证成功')
      break
    else:
      print('密码错误,您还有',counts-1,'次机会')
      counts -= 1

athrunlike 发表于 2020-5-4 15:19:11

sunrise085 发表于 2020-5-4 07:07
为什么要逐个判断呢。直接用in判断有没有*就行了

多换种思路解法,这样才能更深刻了解程序吧。
页: [1]
查看完整版本: python第九讲课后练习的一个知识点运用求解