#python #variables #numbers #docx
#python #переменные #числа #docx
Вопрос:
Я пытаюсь внести некоторые изменения в файл docx… преобразование числа в букву (т.Е. если переменная равна 01 = ‘один’, равна 02 = ‘два’ и так далее, но на испанском языке). Проблема в том, что переменная 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.'
Комментарии:
1.
makedocx
Даже вызывается?2. Это всего лишь часть кода… тот, у кого проблема…
Ответ №1:
Посмотрите правила «глобальной области видимости» для python. В общем, старайтесь избегать глобальных переменных, насколько это возможно (хотя бы для того, чтобы избежать подобных ошибок)
в nombre_dia():
f_dia_nom = "Un"
или любое другое назначение, если на то пошло, заставляет компилятор python создавать это число ЛОКАЛЬНО для функции nombre_dia.
измените свою функцию, чтобы объявить f_dia_nom как глобальную:
def nombra_dia():
global f_dia_nom
...
Это заставит nombre_dia ВИДЕТЬ f_dia_nom в качестве глобального
Ссылки
Изучение Python, 4-е издание, стр. 408
Комментарии:
1. Я рад. Однако убедитесь, что вы знаете, почему это сработало. Понимание нюансов правил определения области видимости для данного языка — верный способ подняться над noobdum (нубностью?).
Ответ №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.'
Комментарии:
1.Или используйте
global
злой смешок, чтобы соответствовать аватару с зеленой головой ( 1)2. НИКОГДА НЕ ИСПОЛЬЗУЙТЕ
global
! (Если только вы не можете с этим поделать!)
Ответ №3:
Избавьтесь от if __name__ == '__main__':
того, что проверяет, находитесь ли вы в основном модуле. (Тот, который вы специально просили запустить). Я предполагаю, что это не так.
if __name__ == '__main__'
имеет смысл, только если вы находитесь на уровне модуля (вне каких-либо функций, чтобы вы могли определить, запускаетесь ли вы или импортируетесь.)
Ответ №4:
Сложно понять, что именно должно происходить в вашем коде, но несколько моментов:
-
Вы печатаете строку ‘f_dia_nom’, а не переменную f_dia_nom
-
Вы не можете изменять глобальные переменные изнутри функции, не используя
global <variable>
сначала -
Нет необходимости проверять 1 и 01 (и т.д.), Поскольку 1 == 01
-
Кажется, вы нигде не настраиваете / не создаете
f_dia2
…