Как использовать append в Пайтоне с динамическими переменными, созданными с exec ()?

Очень хорошо, намерение этой программы довольно специфическое, в списке я хочу сохранять серию писем, телеграмм или узлов, которые прибывают в контору почты, тогда хочу сохранять (различный) каждый в списке так называемое ПИСЬМО, для случая писем, проблема дает мне, когда я использую append (), так как, когда я показываю письма в этом случае, который сохранял в готовом ПИСЬМЕ, он показывает все письма, которые я теоретически ввел, ПРОБЛЕМА состоит в том, что все у них есть, та же информация!! как будто append он вводил то же письмо всегда, и я не знаю, что он происходит. Помощь!

 
CARTA = []
TELEGRAMA = []
BULTO = []
agg = "s"
x = 0

carta = [[None] * 2 for i in range(5)] carta[0][0] = "Nombre del destinatario: " carta[1][0] = "Direccion del destinatario: " carta[2][0] = "Nombre del remitente: " carta[3][0] = "Fecha de envio: " carta[4][0] = "Nacionalidad: "

telegrama = [[None] * 2 for i in range(5)] telegrama[0][0] = "Nombre del destinatario: " telegrama[1][0] = "Direccion del destinatario: " telegrama[2][0] = "Nombre del remitente: " telegrama[3][0] = "Cantidad de palabras: " telegrama[4][0] = "Impuesto aplicado: "

bulto = [[None] * 2 for i in range(5)] bulto[0][0] = "Nombre del destinatario: " bulto[1][0] = "Direccion del destinatario: " bulto[2][0] = "Nombre del remitente: " bulto[3][0] = "Peso: " bulto[4][0] = "Urgencia de entrega: "

accion = int(raw_input ("""Buenas noches, oficina de correos. ¿Que accion desea realizar?

1- Recibir correspondencia 2- Despachar correspondencia 3- Entregar correspondencia personalmente\n\n>"""))

if accion == 1: tcorreo = int(raw_input("""Que tipo de correspondencia es la que trae?

1- Carta
2- Telegrama
3 Bulto postal\n\n>"""))

if tcorreo == 1:
    while agg == "s":
        exec("carta%d = carta[:]" % x)
        exec("print 'carta%d'" % x)
        for i in range(len(carta)):
            exec("carta%d[%d][1] = raw_input(carta[%d][0])" % (x, i, i))
        #exec("cartay = carta%d" % x)
        exec("CARTA.append(carta%d)" % x)
        x = x+1
        agg = raw_input("Desea entregar otra carta? s/n")

print CARTA

0
задан 27.11.2018, 18:36
3 ответа

Я только что решил это формы, в которой он хотел! я имею их, потому что он может помогать какому-либо. Проблема была таким образом что он копировал список к другой произведенной dinámicamente. У меня нет идеи, почему он не удавался, но я нашел другую функцию copy.deepcopy() что сделал работу соответствующим образом. Здесь я имею их:


# coding: latin-1

import copy

CARTA = []
agg = "s"
x = 0


carta = [[None] * 2 for i in range(5)]
carta[0][0] = "Nombre del destinatario: "
carta[1][0] = "Direccion del destinatario: "
carta[2][0] = "Nombre del remitente: "
carta[3][0] = "Fecha de envio: "
carta[4][0] = "Nacionalidad: "


accion = int(raw_input ("""Buenas noches, oficina de correos. ¿Que accion desea realizar?

1- Recibir correspondencia
2- Despachar correspondencia
3- Entregar correspondencia personalmente\n\n>"""))

if accion == 1:
    tcorreo = int(raw_input("""Que tipo de correspondencia es la que trae?

    1- Carta
    2- Telegrama
    3 Bulto postal\n\n>"""))

    if tcorreo == 1:
        while agg == "s":
            exec("carta%d = copy.deepcopy(carta)" % x)
            exec("print 'carta%d'" % x)
            for i in range(len(carta)):

                exec("carta%d[%d][%d] = raw_input(carta[%d][%d])" % (x, i, 1, i,0))

            exec("CARTA.append(carta%d)" % x)
            x = x+1
            agg = raw_input("Desea entregar otra carta? s/n")

    print CARTA

2
ответ дан 24.11.2019, 13:25

Двигая блок:

carta = [[None] * 2 for i in range(5)]
carta[0][0] = "Nombre del destinatario: "
carta[1][0] = "Direccion del destinatario: "
carta[2][0] = "Nombre del remitente: "
carta[3][0] = "Fecha de envio: "
carta[4][0] = "Nacionalidad: "

внутрь while, функционируй правильно, без необходимости не использовать ningГєn ни exec ни переменную x:

# coding: latin-1

CARTA = []
TELEGRAMA = []
BULTO = []
agg = "s"


accion = int(raw_input ("""Buenas noches, oficina de correos. ¿Que accion desea realizar?


1- Recibir correspondencia
2- Despachar correspondencia
3- Entregar correspondencia personalmente\n\n>"""))


if accion == 1:
    tcorreo = int(raw_input("""Que tipo de correspondencia es la que trae?


1- Carta
2- Telegrama
3 Bulto postal\n\n>"""))

if tcorreo == 1:
    while agg == "s":
        carta = [[None] * 2 for i in range(5)]
        carta[0][0] = "Nombre del destinatario: "
        carta[1][0] = "Direccion del destinatario: "
        carta[2][0] = "Nombre del remitente: "
        carta[3][0] = "Fecha de envio: "
        carta[4][0] = "Nacionalidad: "

        for i in range(len(carta)):
            carta[i][1] = raw_input(carta[i][0])

        CARTA.append(carta)

        agg = raw_input("Desea entregar otra carta? s/n ")

print CARTA

lГ-nea я поместил

# coding: latin-1

, потому что я не воспринимался характер ¿. в–є

TambiГ©n я ayudГі следующая ссылка в–є , потому что я новый в Пайтон , и не entendГ - в cГіmo были присоединены списки.

1
ответ дан 24.11.2019, 13:25

Тебе оставил пример cГіdigo (упрощенный относительно твоего), что не использует exec, и который я думаю, что он делает то, что ты хочешь. Если он не asГ, - пожалуйста, измени твой вопрос, чтобы объяснять лучше quГ© вот то, что ты хочешь сделать. Различные cartas хранят все в CARTA:

CARTA = []
agg = "s"
x = 0

carta = [[None] * 2 for i in range(5)]
carta[0][0] = "Nombre del destinatario: "
carta[1][0] = "Direccion del destinatario: "
carta[2][0] = "Nombre del remitente: "
carta[3][0] = "Fecha de envio: "
carta[4][0] = "Nacionalidad: "

accion = int(raw_input("""Buenas noches, oficina de correos. ¿Que accion desea realizar?

1- Recibir correspondencia\n\n>"""))

if accion == 1:
    tcorreo = int(raw_input("""Que tipo de correspondencia es la que trae?

1- Carta\n\n>"""))

if tcorreo == 1:
    while agg == "s":
        for i in range(len(carta)):
            carta[i][1] = raw_input(carta[0][0])
        CARTA.append(carta)
        x = x+1
        agg = raw_input("Desea entregar otra carta? s/n")
        if agg != "s":
            break
        print CARTA
0
ответ дан 24.11.2019, 13:25
  • 1
    Я не функционирую таким образом, что ты это послал, у тебя было много проблем identacion, но я это исправил и попытался, и проблема сохраняется. Попробуй выполнять мой и добавь более одного письма и после наблюдай, что, напечатав все, вошедшие содержат тот же info –  Power_HR 12.09.2016, 19:22
  • 2
    В моем примере в и # 241; ado письма и в конце концов est и # 225; n все в CARTA. Тогда я ничего не понял в том, что ты хочешь сделать. Измени вопрос и(или) c и # 243; я говорю, чтобы видеть, я или может ли другой как понимает то, что ты хочешь сделать.... –  kikocorreoso 12.09.2016, 21:07