鱼C论坛

 找回密码
 立即注册
查看: 927|回复: 4

[已解决][课后作业] 第009讲:了不起的分支和循环3

[复制链接]
发表于 2020-6-3 11:24:31 | 显示全部楼层 |阅读模式

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

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

x
9.5
我下面的代码不应该打印出 3 么?结果却是没有
while True:
    while True:
        break
        print(1)
print(3)

而答案的代码却能打印出2 和3
while True:
    while True:
        break
        print(1)
    print(2)
    break
print(3

动动手0.
我以下代码有什么问题么?
count = 3
password = 666

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

最佳答案
2020-6-3 11:27:54
本帖最后由 Twilight6 于 2020-6-3 11:41 编辑

  • 第一个代码:
    因为你死循环了 永远不会执行到 print() 函数那,而且 break 是终止并退出循环,在print(1) 前面也导致了print(1) 永远不被执行
  • 第二个代码:
    print(2) 下面有break 可以退出循环执行print(3) 所以都能打印
  • 动动手问题:
    1 . 逗号好几个是中文逗号,要改成英文
    2 . password 是整型 而 input 输出的是字符串 永远不可能相等 ,要在passwd 那转成整型 int 或者把 password 转为字符串 ,因为你要判断 * 号是否在你输入内,所以建议这里改成字符串
    3 .
    "密码中不能含有"*"号!" "您还有",count ,"次机会!"
      在字符串内引号如果重复使用要记得转义,除非是单双引号配合,因为Python 识别不出来你两个引号间到底是哪个引号的字符串
    4 . 没有 count - 1 = 1 这种赋值方法 改成  count -= 1 或者 count = count - 1
count = 3
password = '666'

while count:
    passwd = input("请输入密码")
    if passwd == password:
        print("密码正确,进入程序......")
        break
    elif "*" in passwd:
         print("密码中不能含有\"*\"号!" "您还有",count ,"次机会!",end=" ")
         continue
    else:
         print("密码错误!您还有",count-1, "次机会!",end=" ")
    count -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-3 11:27:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-3 11:41 编辑

  • 第一个代码:
    因为你死循环了 永远不会执行到 print() 函数那,而且 break 是终止并退出循环,在print(1) 前面也导致了print(1) 永远不被执行
  • 第二个代码:
    print(2) 下面有break 可以退出循环执行print(3) 所以都能打印
  • 动动手问题:
    1 . 逗号好几个是中文逗号,要改成英文
    2 . password 是整型 而 input 输出的是字符串 永远不可能相等 ,要在passwd 那转成整型 int 或者把 password 转为字符串 ,因为你要判断 * 号是否在你输入内,所以建议这里改成字符串
    3 .
    "密码中不能含有"*"号!" "您还有",count ,"次机会!"
      在字符串内引号如果重复使用要记得转义,除非是单双引号配合,因为Python 识别不出来你两个引号间到底是哪个引号的字符串
    4 . 没有 count - 1 = 1 这种赋值方法 改成  count -= 1 或者 count = count - 1
count = 3
password = '666'

while count:
    passwd = input("请输入密码")
    if passwd == password:
        print("密码正确,进入程序......")
        break
    elif "*" in passwd:
         print("密码中不能含有\"*\"号!" "您还有",count ,"次机会!",end=" ")
         continue
    else:
         print("密码错误!您还有",count-1, "次机会!",end=" ")
    count -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-5 16:42:23 | 显示全部楼层
Twilight6 发表于 2020-6-3 11:27
  • 第一个代码:
    因为你死循环了 永远不会执行到 print() 函数那,而且 break 是终止并退出循环,在prin ...

  • 第一个问题我还是不能理解,第一个代码打印不出print(3),那第二个代码也break也退出循环啦
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2020-6-5 16:43:22 | 显示全部楼层
    HDP1008 发表于 2020-6-5 16:42
    第一个问题我还是不能理解,第一个代码打印不出print(3),那第二个代码也break也退出循环啦

    break 只退出一个循环 而不是全部循环退出
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2020-6-5 16:57:30 | 显示全部楼层
    第一个问题是这样的,你这代码里其实分3个部分,一个外层循环,一个内层循环,还有一个独立于外层循环以外的print(3):代码在执行内层循环的时候,遇到break强制退出内层,因此print(1)不被执行,然后它其实一直在执行外层循环,但是外层循环的代码里是没有需要显示的内容的,所以它不显示内容,只是一直在不断执行这条语句而已。
    假如你这么写:
    while True:
        while True:
            break
            print(1)
        print(3)
    那么它就会不断打印3
    假如你这么写
    while True:
        while True:
            break
            print(1)
        break
    print(3)
    那么它就会打印一个3
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-20 22:46

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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