免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: victorlee129
打印 上一主题 下一主题

类的挑战 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-28 11:04 |只看该作者
发个单元测试上来:

  1. import name;
  2. import unittest;
  3. class Knowntest(unittest.TestCase) :
  4.   def testNormally(self):
  5.     '''Normal test'''
  6.     x=name.name();
  7.     self.assertEqual(x.name,'x');
  8.     y=x;
  9.     self.assertEqual(y.name,'y');
  10.     vic=name.name();
  11.     self.assertEqual(vic.name,'vic');
  12.     #Long
  13.     thethingveryveryverylong=name.name();
  14.     self.assertEqual(thethingveryveryverylong.name,'thethingveryveryverylong');
  15.   def testDeep(self):
  16.     class something: pass;
  17.     tmp=something();
  18.     tmp.x=name.name();
  19.     self.assertEqual(tmp.x.name,'x');
  20.     tmp.other=something();
  21.     tmp.other.some=name.name();
  22.     self.assertEqual(tmp.other.some.name,'some');
  23.   def testEqual(self):
  24.     class nothing(str) :
  25.       def __init__(self,value):
  26.         self=value;
  27.       def __lshift__(self,value):
  28.         return self+' is lshifed with '+value;
  29.       def __rshift__(self,value):
  30.         return self+' is rshifed with '+value;
  31.       def __sub__(self,value) :
  32.         return self+' is subed with '+value;
  33.       def __mul__(self,value) :
  34.         return self+' is muled with '+value;
  35.       def __div__(self,value) :
  36.         return self+' is dived with '+value;
  37.       def __mod__(self,value):
  38.         return self+'is moded with'+value;
  39.       def __xor__(self,value):
  40.         return self+'is xored with'+value;
  41.       def __or__(self,value):
  42.         return self+'is ored with'+value;
  43.       def __and__(self,value):
  44.         return self+'is anded with'+value;
  45.     x=name.name()
  46.     a=nothing(x.name);
  47.     self.assertEqual(a,'x');
  48.     y=name.name();
  49.     self.assertEqual(a+y.name,'xy');
  50.     self.assertEqual(a-y.name,'x is subed with y');
  51.     self.assertEqual(a*y.name,'x is muled with y');
  52.     self.assertEqual(a<<y.name,'x is lshifted with y');
  53.     self.assertEqual(a>>y.name,'x is rshifted with y');
  54.     self.assertEqual(a&y.name,'x is anded with y');
  55.     self.assertEqual(a|y.name,'x is ored with y');
  56.     self.assertEqual(a^y.name,'x is xored with y');
  57.     self.assertEqaul(a%y.name,'x is moded with y');
  58.     self.assertEqual(a<<y.name+y.name,'x is lshitfed wiith yy');
  59. if __name__=='__main__':
  60.   import sys;
  61.   sys.argv+=['-v'];
  62.   unittest.main();
复制代码

[ 本帖最后由 victorlee129 于 2009-3-29 16:13 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2009-03-28 11:58 |只看该作者
import re
return re.split(r'[\s\=.]+',s[-3][-1].split()[-1])[-2]

这样搞定吧. 原帖子,已经修订.

论坛徽章:
0
13 [报告]
发表于 2009-03-29 12:14 |只看该作者
新的测试。
您的程序又failed了。

论坛徽章:
0
14 [报告]
发表于 2009-03-29 15:15 |只看该作者
self.assertEqual(a+y.name,'xy');
    self.assertEqual(a-y.name,'x is subed with y');
    self.assertEqual(a*y.name,'x is muled with y');
    self.assertEqual(a<<y.name,'x is lshifted with y');
    self.assertEqual(a>>y.name,'x is rshifted with y');
    self.assertEqual(a&y.name,'x is anded with y');
    self.assertEqual(a|y.name,'x is ored with y');
    self.assertEqual(a^y.name,'x is xored with y');
    self.assertEqaul(a%y.name,'x is moded with y');

原来是要这样的啊;
那你修改下那个正则搞定吧. 思路是这样. 呵呵.

论坛徽章:
0
15 [报告]
发表于 2009-03-29 16:13 |只看该作者
复合型的怎么办?
如新的测试中最后一个assertEqual

论坛徽章:
0
16 [报告]
发表于 2009-03-29 16:45 |只看该作者
是的.你说的是这个意思.
这个是比较难处理; 根据StackTrace跟踪调用,不是个最好的办法.
也许有更好的方式来处理.

论坛徽章:
0
17 [报告]
发表于 2009-04-02 18:21 |只看该作者
事实上,在x.name前面的只可能是
[';',',',']','[','*','/','.','|','<','>','&','^','%','$','@','!','~',+','-']……
能不能想个办法

论坛徽章:
0
18 [报告]
发表于 2009-04-03 16:20 |只看该作者

回复 #1 victorlee129 的帖子

此题无解

论坛徽章:
0
19 [报告]
发表于 2009-04-04 21:47 |只看该作者
给出证明原体为NP问题,不然只能说是npc问题。

论坛徽章:
0
20 [报告]
发表于 2009-04-08 17:18 |只看该作者
不知道是否理解错误
使用
python globals locals 的 map
用 value 来取  key ,也就是 name 就可以啊

[ tmp for tmp in globals().values() if tmp == abc ]
再反过来  得到 key



补充:
晕仔细看了下题目!!
看来 确实理解错了
x=abc ; 还有这个!

我感觉复杂方法!
修改 __new__ 返回的是一个 代理对象,并非真正的本对象 *(可参考 aop python)
在 aop __new__ 结束后 执行 ,得到 新加入的 globals() key 值,放到 name 中

[ 本帖最后由 liukaiyi 于 2009-4-8 17:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP