2012-04-03 116 views
-6
f=open('new.txt') 
var=f.read() 
var=var.lower() 
var = var.replace(';','') 
var = var.replace(',','') 
var = var.replace('.','') 
x=var.split() 
dict={} 
dictList=[] 
dict2={} 
for i in xrange(0,len(x)-1): 

    if dict.items(): 
     for k in dict.items(): 
      if x[i] not in k: 

       dict[x[i]]=dict2 
       dict2[x[i+1]]=1 

      else: 
       if dict[x[i]].keys(): 
        if x[i+1] in dict[x[i]].keys(): 
         dict[x[i]][x[i+1]]+=1 
        else: 
         dict[x[i]][x[i+1]]=1 
       else: 
        dict[x[i]][x[i+1]]=1 

    else: 

     dict[x[i]]=dict2 
     dict2[x[i+1]]=1 

print dict 

此代码必须打印每个单词的双字节计数。我很确定我实例化了不适当的dict2。我确信这是一个天真的错误,但我不知何故错过了它。有什么建议么? :)此代码错在哪里

+3

你得到什么错误? – PearsonArtPhoto 2012-04-03 14:35:23

+3

“有什么建议吗?”写一个展示问题的最小例子。 – 2012-04-03 14:36:32

+0

“打印每个单词的双字节计数”是什么意思?你能提供一个例子new.txt和输出应该是什么? – 2012-04-03 14:36:52

回答

2

如果我不得不重构这个代码,我想看看:

  • 变量名。像dict这样的名称告诉编码器/维护者什么都没有。 dictdict2有什么区别?你今天可能知道,但明天......也许不是
  • 嵌套为/ if/for/if /如果。很难遵循所有的路径,并确保没有可能的错误。我将它分解成单独的函数,它们可以独立调试和测试。
  • 数据结构。它们通常是程序的核心。但在这里,他们是什么?这对我来说并不明显,这意味着什么/为什么代码执行任何操作并不明显。
  • 错误处理。什么错误是可能的/预期的?哪些将被处理/忽略?
+2

也不要使用'dict',因为它与内置字典类冲突(并覆盖)。 – rplnt 2012-04-03 14:45:14

+0

好点。与'list','int'相同... – 2012-04-03 14:46:53

+0

我会在xrange(...)中加入':我不是处理事物集合的pythonic方法。相反,直接循环集合,或者如果您确实必须知道正在处理的项目的序列号,请使用'enumerate()'。 – 2012-04-03 14:52:01