免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2154 | 回复: 9
打印 上一主题 下一主题

我参照笨办法学pyhonp写的一个例子,请大侠指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-02 15:20 |只看该作者 |倒序浏览
  1. #Filename:ex35

  2. from sys import exit
  3. import re


  4. def gold_room():#进入黄金屋
  5.     print "这间屋里有100公斤黄金,你想拿走多少?"
  6.    
  7.     next = raw_input("-->")
  8.     if  "0" in next or "1" in next or "2" in next or "3" in next or "4" in next or "5" in next or "6" in next or "7" in next or "8" in next or "9" in next :#我实在是找不出别的办法来验证用户的输入了,关键是这里请老师指点一下。
  9.         how_much = int(next)
  10.     else :
  11.         dead("你没上过学吗?数字都不会输入!")
  12.         
  13.     if how_much < 50:
  14.         print "很好,你不是贪心人,你赢得了黄金。"
  15.         exit(0)
  16.     else :
  17.         dead("你是个贪心的混蛋,你输了。")
  18.         
  19.         
  20. def bear_room():#进入到有熊的房间
  21.     print "这里有一只熊!"
  22.     print "熊手中有一灌蜂蜜。"
  23.     print "胖熊在另一扇门前。"
  24.     print "你如何做才能使熊移动?"
  25.     bear = False
  26.    
  27.     while True:
  28.         next = raw_input("-->")
  29.         
  30.         if next == "take honey":
  31.             print "熊盯着你,并且拍打你的脸。"
  32.         elif next == "taunt bear" and not bear :
  33.             print "熊从门前走开了,你可以通过这扇门。"
  34.             bear = True
  35.         elif  next == "taunt bear" and bear:
  36.             dead("这只熊很生气,咬掉了你的一条腿。")
  37.         elif next == "open door" and bear:
  38.             gold_room()
  39.         else :
  40.             print "我不能明白你的意思?"
  41.             
  42. def cthulhu_room():
  43.     print "嘿,你看见了一个巨大的怪物。"
  44.     print "他盯着你,使你感觉要疯了."
  45.     print "你是选择逃跑还是奉献自己的头."
  46.    
  47.     next =raw_input("-->")
  48.    
  49.     if  "fell" in next :
  50.         start()
  51.     elif "head" in next:
  52.         dead("真是美味啊!")
  53.     else:
  54.         cthulhu_room()

  55. def dead(why):
  56.     print why,"good job!."
  57.     exit(0)
  58.    
  59. def start():
  60.     print "你进入到一个黑暗的房间。"
  61.     print "这里有左和右两扇门."
  62.     print "你选择哪一边呢?"
  63.    
  64.     next = int(raw_input("-->"))
  65.    
  66.     if next == 1:
  67.         bear_room()
  68.     elif next == 2:
  69.         cthulhu_room()
  70.     else:
  71.         dead("你一直被困在房间里,直到饿死。")
  72.         
  73. start()
  74.         
  75.             
  76.             
  77.    
复制代码
关键是在验证用户输入的地方,我试过了正则表达式,if re.match(r"%d",next),但不管我怎么输入,都会直接跳到最后一个判断,说我输入的不是数字。没办法之下,只好用了笨办法。不要笑我哦。

论坛徽章:
0
2 [报告]
发表于 2013-05-02 19:29 |只看该作者
if  "0" in next or "1" in next or "2" in next or "3" in next or "4" in next or "5" in next or "6" in next or "7" in next or "8" in next or "9" in next

=>

for x in [str(num) fo num in range(1, 10)]:
    if x in next:
        how_much = x
        break

测试代码如下:
how_much = 0
aa = 'adskjsaljfl5'
for x in [str(n) for n in range(1,10)]:
    if x in aa:
        how_much = x
        break
print how_much

ps: 尽量不要用next这种关键字做变量名

论坛徽章:
0
3 [报告]
发表于 2013-05-03 10:17 |只看该作者
谢谢稍有积蓄的指点。原来可以这样,用随机数来赋值,然后再判断。看来编程重要的是活学活用,不是光死记得一些理论。再次谢谢,使小的茅塞顿开。

论坛徽章:
0
4 [报告]
发表于 2013-05-03 10:19 |只看该作者
谢谢稍有积蓄的指点。原来可以这样,用随机数来赋值,然后再判断。看来编程重要的是活学活用,不是光死记得一些理论。再次谢谢,使小的茅塞顿开。
再请问for x in [str(num)for num in range(1,10)]: 这里用一个for不行吗?比如:for x in [range(1,10):

论坛徽章:
0
5 [报告]
发表于 2013-05-03 10:41 |只看该作者
刚才按您说的更改了代码。发现了一个问题。
  1. def gold_room():#进入黄金屋
  2.     print "这间屋里有100公斤黄金,你想拿走多少?"
  3.    
  4.     next = raw_input("-->")
  5.     for x in [str(num) for num in range(1,10)]:
  6.         #print x #最先取得的值是1
  7.         if x in next:#如果用户输入的值没有1,那就会直接跳到另一分支,程序不能正常执行
  8.             how_much = int(next)
  9.             break
  10.         else:
  11.             dead("你没上过学吗?数字都不会输入!")
  12.         if how_much < 50:
  13.             print "很好,你不是贪心人,你赢得了黄金。"
  14.             exit(0)
  15.         else:
  16.             dead("你是个贪心的混蛋,你输了。")
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-05-03 11:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2013-05-03 11:57 |只看该作者
回复 6# thinkc
十分感谢!if next.isdigit():这么简单的一句就解决了问题。太感谢了!!!

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
8 [报告]
发表于 2013-05-03 18:33 |只看该作者
本帖最后由 ssfjhh 于 2013-05-03 18:38 编辑
  1. next = raw_input("-->")
  2.     if  "0" in next or "1" in next or "2" in next or "3" in next or "4" in next or "5" in next or "6" in next or "7" in next or "8" in next or "9" in next :#我实在是找不出别的办法来验证用户的输入了,关键是这里请老师指点一下。
  3.         how_much = int(next)
  4.     else :
  5.         dead("你没上过学吗?数字都不会输入!")
复制代码
  1. try:
  2.     how_much = int(raw_input("-->")
  3. except:
  4.     dead("你没上过学吗?数字都不会输入!")
复制代码
要学会捕捉意常。

论坛徽章:
0
9 [报告]
发表于 2013-05-04 16:21 |只看该作者
谢谢指点,还没学到异常处理。但十分感谢,使我知道了异常的作用

论坛徽章:
0
10 [报告]
发表于 2013-05-07 16:20 |只看该作者
那啥,就说一句,数字不是\d么。。%d是个什么情况
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP