Переменные не работают ... или я что-то упустил? - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь внести некоторые изменения в файл 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 ]

5 голосов
/ 12 мая 2011

Посмотрите «глобальные правила» для python. В общем, старайтесь как можно больше избегать глобальных переменных (хотя бы для того, чтобы избежать подобных ошибок)

в nombre_dia ():

f_dia_nom = "Un" 

или любое другое присвоение по этому вопросу заставило компилятор python создать этот номер LOCAL для функции nombre_dia.

измените вашу функцию, чтобы объявить f_dia_nom глобальным:

def nombra_dia():
   global f_dia_nom

   ...

У него будет nombre_dia, СМ. F_dia_nom в качестве глобального

Ссылки

Изучение Python 4-е издание, стр. 408

2 голосов
/ 12 мая 2011

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.'
0 голосов
/ 12 мая 2011

Трудно точно понять, что должно происходить в вашем коде, но несколько моментов:

  1. Вы печатаете строку 'f_dia_nom', а не переменную f_dia_nom

  2. Вы не можете изменять глобальные переменные внутри функции, не используя global <variable> first

  3. Нет необходимости проверять 1 и 01 (и т. Д.) с 1 == 01

  4. Вы, похоже, не устанавливаете / создаете f_dia2 где-либо ...

0 голосов
/ 12 мая 2011

Избавьтесь от if __name__ == '__main__': То есть проверяется, находитесь ли вы в основном модуле или нет.(Тот, который вы специально попросили запустить).Я предполагаю, что это не так.

if __name__ == '__main__' имеет смысл только в том случае, если вы находитесь на уровне модуля (вне каких-либо функций, поэтому вы можете определить, выполняете ли вы или импортируете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...