鱼C论坛

 找回密码
 立即注册
查看: 2355|回复: 7

[已解决]python 零基础的第九讲课后题动动手的第一个题目,求教

[复制链接]
发表于 2016-3-9 11:42:25 | 显示全部楼层 |阅读模式

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

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

x
为什么是死循环?

pass_word = raw_input('请输入密码:')
times = 3
while pass_word :
    if '*' in pass_word:
        print '密码中不能含有*号!你还有 times 次机会,请输入密码'
        continue
    else :
            if pass_word == 'fishc.com':
                print '密码正确'
                break
            else:
                    
                print'密码输入错误!你还有times-1次机会,请输入密码'
                times -=1

最佳答案
2016-3-9 12:01:16
你不能在while这么写,只要不是0的字符,都会被python认成条件为true,所以while的判断一直为真,当然就死循环了
如果你想把输入的字符一个一个取出来,就写成
  1. for each in password:
复制代码

但相应的后边的逻辑也要改,你自己在想一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-9 12:01:16 | 显示全部楼层    本楼为最佳答案   
你不能在while这么写,只要不是0的字符,都会被python认成条件为true,所以while的判断一直为真,当然就死循环了
如果你想把输入的字符一个一个取出来,就写成
  1. for each in password:
复制代码

但相应的后边的逻辑也要改,你自己在想一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-9 14:10:02 | 显示全部楼层
shuofxz 发表于 2016-3-9 12:01
你不能在while这么写,只要不是0的字符,都会被python认成条件为true,所以while的判断一直为真,当然就死 ...

明白了你的意思,看出了我写的跟老师写的有哪些不同 改过后的代码还是有问题:
passwd= 'fishc.com'
times = 3
while times :
    pass_word = raw_input('请输入密码:')
    if pass_word  == passwd:
        print '密码正确'
        break
    elif '*' in pass_word:
        print '密码中不能含有*号!你还有%s次机会,请输入密码'% times
        continue
    else:
        print'密码输入错误!你还有%s次机会,请输入密码'% times-1
    times -= 1
运行结果
>>> ================================ RESTART ================================
>>>
请输入密码:fic

Traceback (most recent call last):
  File "C:/Python27/pss_word.py", line 12, in <module>
    print'密码输入错误!你还有%s次机会,请输入密码' % times-1
TypeError: unsupported operand type(s) for -: 'str' and 'int'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-9 15:01:39 | 显示全部楼层
shuofxz 发表于 2016-3-9 12:01
你不能在while这么写,只要不是0的字符,都会被python认成条件为true,所以while的判断一直为真,当然就死 ...

知道问题在哪了,再试试你说的这种办法改改
代码应该改成这样:
passwd= 'fishc.com'
times = 3
while times :
    pass_word = raw_input('请输入密码:')
    if pass_word  == passwd:
        print '密码正确'
        break
    elif '*' in pass_word:
        print '密码中不能含有*号!你还有%s次机会,请输入密码'% times
        continue
    else:
        print'密码输入错误!你还有%s次机会,请输入密码'% (times - 1)#这个应该用小括号括起来就不会报错了
    times -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-9 15:22:08 | 显示全部楼层
仙人掌的花go 发表于 2016-3-9 15:01
知道问题在哪了,再试试你说的这种办法改改
代码应该改成这样:
passwd= 'fishc.com'

print输出的时候数字类型的应该用%d来输出
还有当执行三次都错了之后,应该提示其他的语句,而不是“密码输入错误!你还有0次机会,请输入密码”
上面的逻辑你再好好想一下怎么改

下次发代码的时候用代码格式发,在编辑框有个<>图标,把代码粘贴到哪里就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-9 15:22:19 | 显示全部楼层
仙人掌的花go 发表于 2016-3-9 15:01
知道问题在哪了,再试试你说的这种办法改改
代码应该改成这样:
passwd= 'fishc.com'

print输出的时候数字类型的应该用%d来输出
还有当执行三次都错了之后,应该提示其他的语句,而不是“密码输入错误!你还有0次机会,请输入密码”
上面的逻辑你再好好想一下怎么改

下次发代码的时候用代码格式发,在编辑框有个<>图标,把代码粘贴到哪里就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-9 15:28:50 | 显示全部楼层
  1. pass_word = input('请输入密码:')
  2. password='fishc.com'
  3. times = 2
  4. for times in range (2,0,-1) :
  5.     if pass_word == password:
  6.         print ('密码正确')
  7.         break
  8.     else :
  9.         if '*' in pass_word:
  10.             print ('密码中不能含有*号!你还有', times,'次机会' )
  11.         else:  
  12.             print('密码输入错误!你还有',times,'次机会' )
  13.         pass_word = input('请重新输入密码:')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-3-9 16:55:36 | 显示全部楼层
shuofxz 发表于 2016-3-9 15:22
print输出的时候数字类型的应该用%d来输出
还有当执行三次都错了之后,应该提示其他的语句,而不是“密 ...

谢谢指导
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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