变量不起作用......或者我错过了什么?

时间:2011-05-12 17:50:47

标签: python variables numbers docx

我正在尝试对docx文件进行一些编辑...将数字设为字母(即如果变量等于01 ='one',则等于02 ='two',依此类推,但是西班牙)。问题是变量f_dia_nom不起作用......它甚至没有打印任何东西......我做错了什么?或者我错过了什么?

#!/usr/bin/env python2.6

from Tkinter import *
from docx import *
import tkMessageBox

root = Tk()

nombre = ""
exp_no = ""
ubic = ""
munic = ""
prov = ""
f_dia = ""
f_dia2 = ""
f_dia_nom = ""

def nombre_dia():
         if f_dia2 == 1 or f_dia2 == 01:        
             f_dia_nom = "Un"
         elif f_dia2 == 2 or f_dia2 == 02:               
             f_dia_nom  =  "Dos"
         elif f_dia2 == 3 or f_dia2 == 03:        
             f_dia_nom = "Tres"
         elif f_dia2 == 4 or f_dia2 == 04:               
             f_dia_nom = "Cuatro"
         elif f_dia2 == 5 or f_dia2 == 05:               
             f_dia_nom = "Cinco"
         elif f_dia2 == 6 or f_dia2 == 06:        
             f_dia_nom = "Seis"
         elif f_dia2 == 7 or f_dia2 == 07:               
             f_dia_nom = "Siete"             
         else:
             f_dia_nom = "Error"

# Hacer el docx      
def makedocx():
         if __name__ == '__main__':        
             # Default set of relationshipships - these are the minimum components of a document
             relationships = relationshiplist()

             # estructura del documento
             document = opendocx('test.docx')
             docbody = document.xpath('/w:document/w:body',namespaces=nsprefixes)[0]

             # Buscar y reemplazar
             print 'Replacing ...',
             docbody = replace(docbody,'V_EXP',en1.get())            
             docbody = replace(docbody,'V_NOMBRE',en0.get()) 
             docbody = replace(docbody,'V_OPERACION',op.get())           
             docbody = replace(docbody,'V_UBIC',en3.get())
             docbody = replace(docbody,'V_MUNI',en4.get())
             docbody = replace(docbody,'V_PROV',en5.get())
             docbody = replace(docbody,'V_F_DIA',en6.get())
             docbody = replace(docbody,'V_F_MES',mes.get())          
             docbody = replace(docbody,'V_F_SEM',sem.get())
             docbody = replace(docbody,'V_NUM_DIA',en7.get())            
             nombre_dia()
             docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)            
             print 'f_dia_nom'
             print 'done.'

4 个答案:

答案 0 :(得分:5)

查找python的'全局范围'规则。一般来说,尽量避免使用全局变量(如果只是为了避免这些错误)

在nombre_dia()中:

f_dia_nom = "Un" 

或该问题的任何其他任务都有python编译器为nombre_dia函数创建该编号LOCAL。

修改你的函数以将f_dia_nom声明为全局:

def nombra_dia():
   global f_dia_nom

   ...

它将使nombre_dia将f_dia_nom视为全局

参考

学习Python第4版第408页

答案 1 :(得分:2)

f_dia_nom是一个全局变量,这不是一个好的开始。如果你想操作它,将f_dia2作为参数传递给函数nombre_dia(),然后从函数返回f_dia_nom

def nombre_dia(f_dia2):
         if f_dia2 == 1 or f_dia2 == 01:        
             f_dia_nom = "Un"
         elif f_dia2 == 2 or f_dia2 == 02:               
             f_dia_nom  =  "Dos"
         elif f_dia2 == 3 or f_dia2 == 03:        
             f_dia_nom = "Tres"
         elif f_dia2 == 4 or f_dia2 == 04:               
             f_dia_nom = "Cuatro"
         elif f_dia2 == 5 or f_dia2 == 05:               
             f_dia_nom = "Cinco"
         elif f_dia2 == 6 or f_dia2 == 06:        
             f_dia_nom = "Seis"
         elif f_dia2 == 7 or f_dia2 == 07:               
             f_dia_nom = "Siete"             
         else:
             f_dia_nom = "Error"

         return f_dia_nom

if __name__ == '__main__':
    # All your other code...
    f_dia_nom = nombre_dia(f_dia2)
    print 'f_dia_nom =', f_dia_nom
    docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)
    print 'done.'

答案 2 :(得分:0)

摆脱if __name__ == '__main__':正在测试你是否在主模块中。 (你特意要求的那个)。我猜你不是。

if __name__ == '__main__'只有在模块级别(在任何函数之外,因此您可以检测到您是在运行还是正在导入)时才有意义。)

答案 3 :(得分:0)

很难确切地看到代码中应该发生什么,但有几点:

  1. 您正在打印字符串'f_dia_nom'而不是变量f_dia_nom

  2. 如果不首先使用global <variable>

  3. ,则无法在函数内部更改全局变量
  4. 自1 == 01

  5. 后无需检查1和01(等)
  6. 您似乎无法在任何地方设置/创建f_dia2 ...