鱼C论坛

 找回密码
 立即注册
查看: 2442|回复: 18

第九讲的这个程序我搞不懂

[复制链接]
发表于 2014-7-26 23:17:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mumudontcry 于 2014-7-27 13:12 编辑

第九讲的输入密码的程序
我绞尽脑汁终于想出来了,但是……我不知道对不对,我测试了n~~~组数据都可以,程序我自己都觉得有点乱,不会改了,帮我看看哈,各位有什么想法也告诉我>_<
~~~~~~~~~~~华丽的分割线~~~~~~~~~~~
password = "木木是帅哥"
string = input("请输入密码:")
i = 3
#t ==1的时候认为没有*
t = 1
while i > 0:
        if string == password:
            print("输入正确,进入程序……")
            break
#先把简单的写了,else之后就一定是密码错误的情况
        else:
            for a in string:
                if a == "*":
                    t = 0
#设置一个t作为标志,我不知道怎么改进这里,加了个t,总觉得这个是多余,但是去掉又错了
            if t == 0:
                string = input("密码中不能含有“*”号!您还有"+str(i)+"次机会!请输入密码:")
                t = 1
#重新设置t的值,因为密码重新输入之后,有可能下次输入的还是带有*
            else:
                i -= 1
#如果不写if i >0,最后可能出现“您还有0次机会”,虽然不能再输入,但是不好看。这不是重点啊,重点是t
                if i > 0:
                    string =input("密码输入错误!您还有"+str(i)+"次机会!请输入密码:")
print("三次机会用完了,明天再来吧")


最后,用你们的回复还有小甲鱼的鱼币砸死我吧>_<
话说,我这个程序是对的么?我不知道python要怎么调试程序,小甲鱼教教嘛

评分

参与人数 2鱼币 +1 贡献 +1 收起 理由
韩小冬 + 1
~风介~ + 1 请认真阅读该板块规则!

查看全部评分

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

使用道具 举报

发表于 2014-7-26 23:49:14 | 显示全部楼层
楼主呀~~~别“点将”不仅小甲鱼会 其他人也会 你这样子了 不好 不好。。。高手很多的哦~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 00:29:42 | 显示全部楼层
题目的要求是怎样的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 01:04:23 | 显示全部楼层
  1. password = "木木是帅哥"
  2. string = input("请输入密码:")
  3. i = 3#猜的次数
  4. t = 1#判断有无*号,1为没有
  5. while i > 0:#次数大于零
  6.         if string == password:
  7.             print("输入正确,进入程序……")
  8.             break#跳出while循环
  9.         else:
  10.             i -= 1#猜错次数减少1
  11.             for a in range(len(string)):#如果密码中有*则把t改为0
  12.                 if string[a] == "*":
  13.                     t = 0
  14.             if t:#t不为零(没有*)
  15.                 if i:#次数不为零
  16.                     string =input("密码输入错误!您还有"+str(i)+"次机会!请输入密码:")
  17.             else:
  18.                 string = input("密码中不能含有“*”号!您还有"+str(i)+"次机会!请输入密码:")
  19.                 t = 1#不知道下次输入是否有*号
  20.             if not i:#如果t小于0
  21.                 print("三次机会用完了,明天再来吧")

  22.                
  23.            
复制代码

  1. >>> ================================ RESTART ================================
  2. >>>
  3. 请输入密码:111*
  4. 密码中不能含有“*”号!您还有2次机会!请输入密码:niko
  5. 密码输入错误!您还有1次机会!请输入密码:f
  6. 三次机会用完了,明天再来吧
  7. >>> ================================ RESTART ================================
  8. >>>
  9. 请输入密码:木木是帅哥
  10. 输入正确,进入程序……
  11. >>>
复制代码

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

使用道具 举报

发表于 2014-7-27 03:17:46 | 显示全部楼层

这里的t要不要申明全局变量。。。。

点评

个人感觉没必要吧~  详情 回复 发表于 2014-7-27 09:41
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 06:51:55 | 显示全部楼层

你这个不对,因为……当输入的有*的时候是不可以减少次数的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 06:52:45 | 显示全部楼层

这是题目要求的>_<
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 06:53:19 | 显示全部楼层
墙角君 发表于 2014-7-27 03:17
这里的t要不要申明全局变量。。。。

??那具体怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 06:57:15 | 显示全部楼层
Angel丶L 发表于 2014-7-26 23:49
楼主呀~~~别“点将”不仅小甲鱼会 其他人也会 你这样子了 不好 不好。。。高手很多的哦~~~~

{:7_148:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 07:02:18 | 显示全部楼层

不过看你写的样子,我那样加t好像也可以{:7_174:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 09:39:46 | 显示全部楼层
mumudontcry 发表于 2014-7-27 06:51
你这个不对,因为……当输入的有*的时候是不可以减少次数的
  1. password = "木木是帅哥"
  2. string = input("请输入密码:")
  3. i = 3#猜的次数
  4. t = 1#判断有无*号,1为没有
  5. while i > 0:#次数大于零
  6.         if string == password:
  7.             print("输入正确,进入程序……")
  8.             break#跳出while循环
  9.         else:
  10.             for a in range(len(string)):#如果密码中有*则把t改为0
  11.                 if string[a] == "*":
  12.                     t = 0
  13.             if t:#t不为零(没有*)
  14.                 i -= 1#猜错次数减少1
  15.                 if i:#次数不为零
  16.                     string =input("密码输入错误!您还有"+str(i)+"次机会!请输入密码:")
  17.             else:
  18.                 string = input("密码中不能含有“*”号!您还有"+str(i)+"次机会!请输入密码:")
  19.                 t = 1#不知道下次输入是否有*号
  20.             if not i:#如果t小于0
  21.                 print("三次机会用完了,明天再来吧")

  22.                
  23.                



  24.    
复制代码
  1. >>> ================================ RESTART ================================
  2. >>>
  3. 请输入密码:1*
  4. 密码中不能含有“*”号!您还有3次机会!请输入密码:a
  5. 密码输入错误!您还有2次机会!请输入密码:b
  6. 密码输入错误!您还有1次机会!请输入密码:c
  7. 三次机会用完了,明天再来吧
  8. >>> ================================ RESTART ================================
  9. >>>
  10. 请输入密码:木木是帅哥
  11. 输入正确,进入程序……
  12. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 09:41:55 | 显示全部楼层
墙角君 发表于 2014-7-27 03:17
这里的t要不要申明全局变量。。。。

个人感觉没必要吧~{:7_181:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 09:56:45 | 显示全部楼层
程序读着还行啊,思路虽然有点不明朗,能运行就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 10:48:10 | 显示全部楼层

好像跟我的差不多= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 10:51:09 | 显示全部楼层

我是因为之前有次测试数据是:
***dasd 3次
asd*** 3次
asd****asd 3次
***asdasd 2次
这个2次不知道怎么回事,虽然看起来很不科学,但就是这么回事,不过改了之后就这个样子了,然后测试很多数据都是对的,不知道会不会出现这种不科学的结果
所以还是想知道python要怎么分步调试,不然都不知道运行到哪里出现什么结果

点评

我们的代码差不多~ 把你做数据测试的代码贴出来!  详情 回复 发表于 2014-7-27 11:18
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 11:18:23 | 显示全部楼层
mumudontcry 发表于 2014-7-27 10:51
我是因为之前有次测试数据是:
***dasd 3次
asd*** 3次
  1. >>>
  2. 请输入密码:***asdasd
  3. 密码中不能含有“*”号!您还有3次机会!请输入密码:
复制代码

我们的代码差不多~
把你做数据测试的代码贴出来!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-27 13:25:01 | 显示全部楼层
~风介~ 发表于 2014-7-27 11:18
我们的代码差不多~
把你做数据测试的代码贴出来!

我先前的代码已经给改了,改成这个样子了,木有了……
我觉得问题应该是:
string = asd**fgh
for a in string:
       #如果a ==*,则重新输入string,比如变成了as*Dfgh
此时假如a循环到string[3]也就是d后的*的位置上,刚好触发了修改string的语句,变成了as*Dfgh,此时a在[3]的位置,即D上,这个时候D包括以后的都不是*,于是
a继续下一轮循环直到把新的string给循环掉,这个时候这样的程序是认为新的string是没有*的,可实际上是有*的
上面是我的理解,这样理解对么?
也就是说,如果在for里修改了要a循环的那个字符串的值,那么a的位置应该是继续刚才的位置而不是从0开始吧
如果是这样的话,那么那种不科学的结果就可以这么解释了
不知道你有没有理解我的意思

点评

不错,看来你已经理解啦~  详情 回复 发表于 2014-7-27 17:33
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 13:30:17 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 17:33:46 | 显示全部楼层
mumudontcry 发表于 2014-7-27 13:25
我先前的代码已经给改了,改成这个样子了,木有了……
我觉得问题应该是:
string = asd**fgh

不错,看来你已经理解啦~{:7_155:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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