鱼C论坛

 找回密码
 立即注册
查看: 2581|回复: 15

[已解决]0基础学习python,求指教。

[复制链接]
发表于 2021-2-18 15:54:19 | 显示全部楼层 |阅读模式
30鱼币
    设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
  count = 3
password = 'FishC.com'

while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue
    else:
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')   
    count -= 1


  看了两遍小甲鱼讲这个的视频还是对这个不解,就是感觉break continue在一起用 很懵逼的,一个终止当前循环,跳出循环,一个终止当前循环,检测 开始下一轮循环,就是感觉思路好乱好乱,“*”不算次数这个更是不懂,如果下次再给这样的题目 我感觉我还是不太会,感觉每次的课后题都有一点拔高了,讲解不是太仔细。  这种题的整体思路是什么求解?教人以渔谢谢。 我上夜班可能会晚一些看到
     能不能帮我在每一行代码后注释一下这段代码是什么意思?
最佳答案
2021-2-18 15:54:20
注意自己第一行 count = 3 的缩进,这一点在 python 里面很重要
count = 3  # 三次机会
password = 'FishC.com'

while count:    # 当 count 不为 0 时 执行 while 循环
    # passwd 是一个 str 类型 而 input 不论输入什么最后都是 str 类型,所以不需要强制转换
    passwd = input('请输入密码:')
    if passwd == password:  # 如果用户输入和密码相同,则使用 break 退出 while 循环
        print('密码正确,进入程序......')
        break   # break 退出 while 循环,即不再运行 while 循环
    elif '*' in passwd:  # 这个为什么不让有 * 我不是很理解,个人认为应该是一个程序的需求,就像很多不允许使用字母(银行密码)或者不允许使用数字
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue    # continue 表示退出这一层 while 循环,但是 while 循环并没有完全退出。之所以这么做是为了不运行后续的代码,即 count -= 1,因为此时用户输入的类型不符合程序要求
        # 其实 continue 就相当于跳出本轮循环,并且不执行 continue 后面的语句,直接进入下一层循环
    else:
        # 这个应该就不需要怎么讲了吧,打印剩余次数,end = ' ' 表明不换行,每一次的打印结果用 空格 作为间隔
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')
    count -= 1  # 机会 -1

如图

如图

最佳答案

查看完整内容

注意自己第一行 count = 3 的缩进,这一点在 python 里面很重要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 15:54:20 | 显示全部楼层    本楼为最佳答案   
注意自己第一行 count = 3 的缩进,这一点在 python 里面很重要
count = 3  # 三次机会
password = 'FishC.com'

while count:    # 当 count 不为 0 时 执行 while 循环
    # passwd 是一个 str 类型 而 input 不论输入什么最后都是 str 类型,所以不需要强制转换
    passwd = input('请输入密码:')
    if passwd == password:  # 如果用户输入和密码相同,则使用 break 退出 while 循环
        print('密码正确,进入程序......')
        break   # break 退出 while 循环,即不再运行 while 循环
    elif '*' in passwd:  # 这个为什么不让有 * 我不是很理解,个人认为应该是一个程序的需求,就像很多不允许使用字母(银行密码)或者不允许使用数字
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue    # continue 表示退出这一层 while 循环,但是 while 循环并没有完全退出。之所以这么做是为了不运行后续的代码,即 count -= 1,因为此时用户输入的类型不符合程序要求
        # 其实 continue 就相当于跳出本轮循环,并且不执行 continue 后面的语句,直接进入下一层循环
    else:
        # 这个应该就不需要怎么讲了吧,打印剩余次数,end = ' ' 表明不换行,每一次的打印结果用 空格 作为间隔
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')
    count -= 1  # 机会 -1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 16:32:16 | 显示全部楼层
break continue 其实不难理解的,只要自己多使用

尝试运行一下以下代码
number = 20
while number:
    number -= 1        # number 减少一次
    if number % 5 == 0:
        print('即将运行 continue')
        continue        # continue 后面的语句都不会运行,即 print('随便输出点什么') 不会运行,print(number) 也不会运行,跳出本轮循环,但是会继续 while 循环
        print('随便输出点什么')
    elif number == 3:
        print("程序即将结束")
        break        # break 以后就直接跳出了 while 循环,注意此处只会跳出一层循环,即如果有 n 层嵌套循环(n > 1),则只会跳出一层循环,不会直接跳出嵌套循环
    print(number)
print("程序结束")

运行结果:

截屏2021-02-18 16.29.12.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 17:37:41 | 显示全部楼层
不知看了以下注释您是否更能理解一些
count = 3  #设置用户最多输入次数
password = 'FishC.com' #设置密码

while count:    # 当count不为0时执行while循环(False除了假以外,0、''也是False)
    passwd = input('请输入密码:') #提示用户输入
    if passwd == password:  # 如果用户输入和密码相同
        print('密码正确,进入程序......')
        break   # break表示退出循环,不在执行(即询问用户输入密码)
    elif '*' in passwd:  # 如果有'*'在用户输入的密码内
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ') #提示用户并输出剩余机会
        continue    # continue 表示结束本次循环,因为用户还要继续输入符合规则的密码
    else: #除了密码正确,密码中有*号以外的 - 即密码输入错误
        print('密码输入错误!您还有', count-1, '次机会!', end=' ') #提示输入错误
    count -= 1  # 输入次数 -1

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
Daniel_Zhang + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2021-2-18 17:39:43 | 显示全部楼层
区分以下break和continue:
break 结束循环
continue 跳出本轮循环,下一轮继续执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 17:41:58 | 显示全部楼层
continue多用于不符合要求,暂时跳出
如判断素数,循环遇到不是素数的数时,暂时跳出,判断下一轮循环的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 17:43:25 | 显示全部楼层
break直接结束循环,多用于循环完成,需要退出的时候
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 18:22:59 | 显示全部楼层
整体思路:
先判断用户输入密码与原密码是否一致,一致的话,打印内容,退出循环(break);
如果输入密码中有*的存在,不执行本轮循环,重新循环(continue),要求用户重新输入
如果密码输入错误,把输入次数-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 21:04:51 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 22:37:30 | 显示全部楼层
Py与C。。。 发表于 2021-2-18 17:37
不知看了以下注释您是否更能理解一些

非常感谢你的回答 但是因为楼上先来的,没办法还谅解一下。再次非常感觉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 22:46:36 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-18 15:54
注意自己第一行 count = 3 的缩进,这一点在 python 里面很重要

你好,我还有一些疑问:
1:elif "*" in passwd  (这个是什么语句,小甲鱼视频中未有)
2: print('密码输入错误!您还有', count-1, '次机会!', end=' ')   
    count -= 1
“count -1” 这个冒号是为什么加上去的。还有最后是count-=1 放最后一个且没有缩进,位置是固定的还是可以随便放,
3:就是 while count: 为什么是count  可不可以用True,这个真不太懂。这个循环好不理解为啥是要循环这个变量,
最后一个问题是 能不能 说一下如果在设计这样的程序 整体的思路模式大概是什么样子的。
非常感激,因为上班可能今天回复不了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 23:13:34 | 显示全部楼层
游子学习 发表于 2021-2-18 22:46
你好,我还有一些疑问:
1:elif "*" in passwd  (这个是什么语句,小甲鱼视频中未有)
2: print('密码 ...
1:elif "*" in passwd  (这个是什么语句,小甲鱼视频中未有)


不知道你有没有其他编程语言的基础,暂且就当你没有吧,elif 的意思就相当于其他编程语言的 else if

一般来讲都是 if else 进行搭配,但是这样就只有两种可能,是或非,比如:
if a > 0:
    pass
else:
    pass

要么 a > 0 要么 a <= 0

那么我们想要表达多种情况的话,就需要 elif 语句

比如:
if a > 0:
    pass
elif a == 0:
    pass
else:
    pass

一种是 a > 0 一种是 a == 0 还有一种是 a < 0

当然了,你可以设置很多个 elif(前提是你有需求)

elif "*" in passwd 表示的就是 当 '*' 在 passwd 里面,即 passwd 含有 '*' 时,执行操作

2: print('密码输入错误!您还有', count-1, '次机会!', end=' ')   
    count -= 1
“count -1” 这个冒号是为什么加上去的。还有最后是count-=1 放最后一个且没有缩进,位置是固定的还是可以随便放,


前半部分的冒号我不太明白你的意思,能否详细说明你的问题

后半部分的话,位置肯定是要根据你的程序逻辑进行放置的。你问这个问题的话,证明你自己对这个程序的逻辑顺序并不清楚。在这个程序的这个地方缩进与否问题并不严重,因为只有你输错了密码才会 count - 1,输入正确或者输入了星号,压根就不会扣次数,但是其余的程序你一定得自己缕清逻辑顺序,一个小小的缩进可能会导致意想不到的问题

3:就是 while count: 为什么是count  可不可以用True,这个真不太懂。这个循环好不理解为啥是要循环这个变量,


可以用 True 但是没有必要

你有没有想过一个问题,如果连续错误三次,程序该如何退出?while True 是一个死循环,只能这么写:
if count == 0:
    break

那么问题来了,是直接 while count: 一句话搞定方便点还是上面两句话方便点?你用 while True 没毛病,但是完全没有 while count 来的方便

其实具体的思路模式吧,就是很简单的逻辑模式,其实你可以自行百度一下伪代码,可能先设计一个伪代码会对你有所帮助,如下:
定义尝试次数

定义正确密码

当还有剩余次数时:
    输入密码
    如果密码和正确密码一致:
        输入正确,退出程序
    如果密码中有星号:
        打印剩余次数,退出这一轮循环
    其他情况(输入错误的情况):
        打印剩余次数
    次数减少一次

其实无非就是先想一想,自己要实现什么目的,该如何实现这个目的,然后写伪代码

伪代码写好以后就用代码来替换这些伪代码

伪代码其实就是方便你去思考,也许在敲代码的时候,你会发现伪代码并没有那么完善,可能很多问题并没有考虑完备

其实就是自己脑补一个运行逻辑,制成伪代码,再填补真代码

当然了,当你熟悉了以后,就可以直接写代码,不需要伪代码的辅助了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-19 10:18:47 | 显示全部楼层
学习,学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-19 11:32:54 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-18 23:13
不知道你有没有其他编程语言的基础,暂且就当你没有吧,elif 的意思就相当于其他编程语言的 else if
...

非常感谢 实在太困 等我睡一觉起来 在仔细看一下, 那个冒号 print('密码输入错误!您还有', count-1, '次机会!', end=' ') 在这个字符串中 已经有冒号了,为什么还要给 “count-1”这个再单独加一个冒号呢? 我是这个意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-19 15:20:29 | 显示全部楼层
游子学习 发表于 2021-2-19 11:32
非常感谢 实在太困 等我睡一觉起来 在仔细看一下, 那个冒号 print('密码输入错误!您还有', count-1, ' ...

我不是很明白你说的冒号是什么

我这里没看到任何的 ':' 在这个语句里

你说的是引号 ' ' 吗

如果你说的是 ' ' 的话,那么这个就是字符串打印的一种拼接方式 count - 1 没办法直接放进 ' ' 中(放进去了就直接打印 count - 1 而非 count - 1 的值),所以需要以拼接的方式打印出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-19 17:31:19 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-19 15:20
我不是很明白你说的冒号是什么

我这里没看到任何的 ':' 在这个语句里

我就是这个意思,我懂了 读出来的不一样,明白了。非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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