我自己写的:
password = 'a123456'
x = 3
while x > 0:
password1 = input('请输入密码:')
if password1 == password:
print('登陆成功!')
break
else:
x = x - 1
print('密码错误!还有', x, '次机会')
其中我自己写、自己改的错误:
1⃣️第三行一开始写成>=,结果会出现“还有-1次机会”
2⃣️没写break,密码正确之后还要求再输入密码
3⃣️逗号后面要跟空格
我第二次自己写的:
password = 'a123456'
i = 3
while True:
pw = input('请输入密码:')
if pw == password:
print('登录成功!')
break
else:
i = i - 1
print ('密码错误!还有', i, '次机会。')
if i == 0:
break
其中我自己写、自己改的错误:
1⃣️第3行True首字母没大写
2⃣️第9行没缩进
3⃣️第11行==写成了=
老师教的:
password = 'a123456'
i = 3 # 剩余机会
while True:
pwd = input('请输入密码:')
if pwd == password:
print('登陆成功!')
break # 逃出回圈
else:
i = i - 1
print('密码错误!还有', i, '次机会')
if i == 0:
break
老师进阶版本:
password = 'a123456'
i = 3 # 剩余机会
while i > 0:
pwd = input('请输入密码:')
if pwd == password:
print('登陆成功!')
break # 逃出回圈
else:
i = i - 1
print('密码错误!还有', i, '次机会')
老师再微调:
password = 'a123456'
i = 3 # 剩余机会
while i > 0:
i = i - 1
pwd = input('请输入密码:')
if pwd == password:
print('登陆成功!')
break # 逃出回圈
else:
print('密码错误!')
if i > 0:
print('还有', i, '次机会')
else:
print('没机会尝试了!要锁账号了啦!')
1⃣️上移i = i - 1
2⃣️不印出“还有0次机会”,印出“没机会尝试了!要锁账号了啦!”
上课内容:
1、出题
好 我们现在出一个练习题:密码重试的程式
先在程式码当中 我们先设定好密码
Password=a123456
然后之后我们要让使用者最多输入三次密码
如果不对的话 我们就要印出密码错误 还有几次机会这样
例如说密码错误 我还有两次机会
然后他再试一次错误的话 就印出密码错误 还有一次机会
他再次错误的话 就密码错误 还有零次机会这样 然后就停
对的话 就印出登入成功
然后当然就不会再问了 密码
2、提示
你们先想想看 然后写写看 看看你遇到什么瓶颈
然后你如果真的写不出来也没有关係
我可以这样说 一定很少同学有办法看到这个题目之后就蛮顺利地写出来 应该不太可能 它是蛮有挑战性的
那你如果稍微尝试了之后 你觉得卡关
你可以来看我的解答怎么来做
还蛮有趣的一个挑战
给一点提示 我们要让使用者重覆地输入密码
然后最多三次
那因为要重覆地输入 表示说我们要用到迴圈
那么目前我们只有学过while迴圈
while loop
所以我们知道一定会用到while
那么印出 印出就是print 这个不用提示
不对的话怎么样 对的话怎么样 这种就是if的结构
如果怎么样怎么样 对不对
还有什么东西可以提示吗
如果登入成功就不再输入
就是登入成功 就不要再问使用者密码了
这种就是要用到break
break就是逃出回圈
就逃出那个轮回 那个巡回
所以如果登入成功的时候 你应该要使用到break
3、GitHub建立专案
好 那在我们开始之前 我们一样
先到Github建置一个专案出来
这样我们等一下开始解这个程式的时候
就可以直接上传到Github上面去
然后先建立新的专案 new repository这边
那这个程式因为是密码重试
我就叫它password retry好了
然后建置create这个专案出来
好 这些指令我准备要複製
我到桌面建立一个新的资料夹
然后这个资料夹我名字取得一样 password retry
然后我打开cmd
然后我把这个cd进去这个资料夹裡面
我现在在这个资料夹裡面了
好 那我就可以开始
複製执行这些指令了
git in it初始化
然后Git add
然后Git commit建立一个版本
然后Git remote add
把资料夹做连结
Git push 上传 上传Read me档
好 很顺利就把这部份完成
4、写程序
好 那么了 重新整理
好 那我们现在来写这个程式
那我先把这个password这一行複製下来
这就是答案
这个变数裡面装著答案 这个字串
A123456
这就是我们密码的答案
所以我先存著
好 那我们要让使用者重覆输入
重覆 你看它重覆这两个字 你就想到迴圈
那目前我们只教过while迴圈
while loop
那我就写一个while loop
While这个字写完之后要干嘛
是不是要写一个条件
当怎么怎么样的时候
我们就做什么事情 对不对
以前的例子是这样
比如说一个while I小于10的时候
我们就印出I<10 对不对
类似这样
当I小于10的时候就打打打打打
那你记不记得有另外一种写法
while true对不对
好 那这裡我们不知道写什么
当怎么样的时候 大家卡在这裡
那没关係 卡在这裡
我们就先写while true
因为我们知道一定可以写true 就是无限巡迴
那我看很多人刚开始都会 直接这边写while true
没关係 我们就先这样写
好 那我们要重覆做什么事情
这裡面就是重覆做的事情 对不对
while true底下裡面这一段
那我们要重覆问使用者密码 对不对
所以我们就要重覆地input
请输入密码
然后存下来
如果你存成password 这样不行
因为这样 我们就重覆使用这个名字了
我们password已经用过了
上面已经存一个答案了
如果现在使用者输入完密码
我又存进password
那我这个我上面这个答案
我就覆盖掉了 所以不行
所以这就是为什么我们这边要存不同的名字
我们才可以一个是答案 一个是使用者输入的东西 分开
有些人还是会犯这个错误 不小心用了同样的名字
Pw 我现在存成pwd好了
密码常常的缩写通常都是pwd
好 这是密码
好 那一问完密码 我们就可以做检查
如果他输入的密码是答案的话
答案就password 对不对
我们就说登入成功
那很多人在这个位置
如果密码是答案的部分
非常多人 我看他们写成这样a123456(如下图)
这样可以说是对 可是不好
为什么 因为你这个a123456
我们在第一行就已经存下来了
你们有没有看到a123456
它已经存进这个password了
所以你这边只需要写password就好了
你不用再写a123456了
像这种数值的东西
这种答案的东西
我们通常都存一次就好
这样才不会以后我们要改
还要改两个地方
我要两个地方都改 太麻烦了 不好
所以我们这边应该要password就好了
那么一登入成功
我们要做什么事
我们要立刻break 对不对 逃出迴圈
这样我们就不会重覆再问密码
因为你已经输入对啦
我们就赶快逃出迴圈 我写一个注解 逃出迴圈
如果这三行 应该大家都写得出来
如果密码是对的
我们就印出登入成功 然后立刻break
if pw == password:
print('登录成功!')
break
那密码是对的 我们就做这一块
密码不对的时候 我们要做什么
那是不是就是要else
那么密码不对 我们就印出密码错误
然后还有几次机会
那写到这边 你有没有立刻发现说
到底怎么处理这个几次机会
这好像对大家是一个难点
我们要把这个字串这边拆开
拆成三个部分
print('密码错误!还有', , '次机会')
你看 为什么要拆成三个部分
这裡(密码错误!还有)变成一个字串 str是字串
然后我们这裡要印一个数字( ) Int整数
然后后面这边(次机会) 这又是一个字串
所以字串 整数 字串
我们把原本是一整个字串的东西切两刀之后 它变三段
那现在我们不知道的部分是
中间这个整数的部分要印什么
那既然我不知道要印什么
就表示我还没有创造这个变数出来
那肯定我需要创造一个变数
那我就叫做i好了
就一个i 来代表我们还剩几次机会
好 那我现在印出i
我是不是要把i创造出来
我才可以印它
我就创作在最上面
i刚开始应该等于什么
大部分人回答得出来 i等于3
因为i所代表的意思是剩余机会
我们刚开始是3
因为一次都还没有使用
我们刚开始先把它创作成3
那什么时候要把i减少 就是输错的时候
我们就把剩馀机会降低
i等于i减一
i减完一之后存进i里面
我们才有储存回去的效果
不然你如果只写i减一 是根本没有效的 i是不会改变的
执行看看这个程式
看似好像架构都有了 执行看看
请输入密码打打打打打输入 对不对
很好 第一次错了之后
它显示还有两次 这完全正确
再一次错了 还有一次 完全正确
再一次错误 零次
还有零次机会 它怎么还问我
它怎么还问我密码
惨了 它会变负的了
可是没关係 我们先输入一个对的看看
a123456
登入成功
好 至少对的部分是可以停止的
表示这个break有效
登入成功之后 我们这个break是有效的
好 那现在就是没有机会的时候 我们还没有break
那很简单 如果没机会的时候
剩余机会是变成0的时候
我们就break
登入成功break
剩馀机会是零次的时候 我们也break
所以我们有两种情况下会break
存档
那这样应该就结束了
错误两次 错误一次
错误零次break
因为I变零了 剩馀次数变零了
if i是零 我们break
所以这就是一个最基本款的写法
那最多的同学在第一次尝试这个题目的时候
如果你写得出来会写成这个样子
今天写出来这个很好
而且i等于3来储存剩馀机会
这个非常正确
然后这边就可以印出i次剩馀机会
好 那最后我们把这个程式再执行一次
确定它是运作正常的
好 密码错误 密码错误 密码错误
好 停掉 很好
好 再一次
这次是直接正确的 a123456
好 登入成功
好 我们再试一次
先错误 然后成功
成功放在中间看看
好 也OK
所以各种可能性 我们都试了
上传GitHub
好 那现在我们把它上传到Github
记不记得三部曲
git add
什么 password 对不对
Git 你要建立版本
basic基本版完成
Basic version done done
然后git push oringin master
然后就上传了
我们到Github上面去看看
好 重新整理
好 有没有 password在这边
我们进来看看我们程式码
OK 在这边很好
好 那这边我们很快地复习一下
如果你对这个程式码的架构有点模糊 不瞭解的话
就是譬如说你不晓得为什么这边要空两格 然后这边要空三格 空这么多
如果你对这个架构看不太懂的话
譬如说你这边少写了一个 这样子
你少一个空格 那这有什么问题
就是说这样的话
就代表说这个break不在if的裡面
不在这个if的裡面
你要空过去 移过去
它才会在这个if的裡面
If怎样怎样怎样
我就做一些事情 对不对
我这边要空格才代表 像这样
如果密码是对的 我就印出登入成功
前面我要有空格
这样才代表在它的裡面
在它的旗下 在它的裡面
那所以你如果像这个break这边
你没有空进去的话
就表示说它不在这个if的裡面
所以它的架构就错了
我们想要的是
如果i是零 我们才break
它应该是在裡面的
所以我就把它空进去 你知道吗
进阶挑战
如果我说不能写while true
这边 你一定要写一个真正的条件
那你可以按暂停去想想看
如果你不能写while true的话
你要怎么样修改这个程式码
你这样想
当 while就是当
当怎么样的时候
我要重覆地让他输入密码 对不对
答案就是
当它还有剩馀机会的时候
剩馀机会不就是i吗
它如果还有剩馀机会
我们就让你重覆输入
那你如果扣打用完了
你没有剩馀机会了 我们就不再迴圈
那这裡不是就这样就想通了吗
当i>0
他还有剩馀机会的时候 我就迴圈
那既然i大于0 我才迴圈
我才会在这裡迴圈
我最后这边我就不用检查i是不是零了
我们原本写这两句说
如果i是零 我们就不能再迴圈
因为没有机会了
没有机会再让你尝试密码了
我们这两行就不用了
因为现在会自动离开了
如果i等于零的话
我们就不会再迴圈了
因为这边不对了 对不对
所以这裡最后那两行就删掉
好 这样解决了
就我们程式码变少了 变简单了
这就是一个更新的版本
我存档 好
然后存档之后
我一样 我们先测试一下
我们先测试 确定之后再上传到Github
先确定它可以运作
错误 错误 错误 好 正确的
一样 先输入一个直接对的
a123456 成功
再来错误 然后对
成功 好
那三种情况我们都测试了
那么我们现在就把它上传到Github
Git add
我们现在变成change to while I > 0好了
好 然后我们push origin master
好 上传完了
我一样到Github我重新整理给你们看
我们目前三个版本
我重新整理 它会变四个版本
有没有 变四个版本
Change to while I > 0
我可以点进来看一下 对不对
while I > 0
然后我们最新版的 在Github上面的
那最后我可以再稍微讲一点这个
微调的部分
这边这个i等于i减一
我们就是在减少剩馀次数
其实这一行我们可以写到
迴圈的裡面的第一行
因为这样子的话 我们就
就等于说是
我们每问一次密码
就用掉一次剩馀机会
再一次 每问一次密码
我们就用掉一次剩馀机会
反正每一个迴圈就是问一次密码
所以我们其实不见得要把
剩馀机会减少
写在密码错误的这个小领域裡面
我们其实可以写在那个
迴圈裡面的第一行就可以了
这是一种做法
再来
如果我想要让它
还剩余0次机会的时候
不要印出这一句 对不对
正常来讲应该不会印这一句
密码错误 还有零次机会
这句我不要
那我这边是不是要写说
如果I大于零
我才印还有机会
我先把这一段複製
把它剪下 对不对
还有几次机会
如果i大于零 我才印还有几次机会
那这样就修正了 我存档
如果密码对 我就说登入成功
如果密码不对 我就印出密码错误
然后如果剩馀机会是大于0的
我们还有机会的话 我们就印出还有机会
好 执行 对不对
所以你们看程式码的时候
你们要像我这样可以完全
你看把它翻成白话文
其实它跟言语已经很接近了
好 密码错误 我还有两次机会
密码错误 我还有一次机会
密码错误 对不对
最后一次它没有跟我说还有机会
很好 对不对
好 那假设说最后一次 我想要
没机会的时候 我跟他说没机会好了
然后就说
没机会尝试了 要锁帐号了
要锁帐号了啦
好 存档 再玩一次
错误 错误 错误 对不对
最后一次它印出
没机会尝试了 要锁帐号了 对不对