Nie rozumiem konkretnego zachowania Pythona, kiedy próbuję odświeżić listę. Staram się to rozgryźć, ponieważ utknąłem w małym projekcie.

Oto kod (nie jest kodem projektu, ale jego kod, aby pokazać problem):

import time

time_1 = [1,2,3,4,5]
time_change = time_1

def test():
    global time_change
    time_change.remove(1)
    print(time_change)
    
    time.sleep(10)
    
    time_change = time_1
    
    print(time_change)
# What i would like to have is time_change = time_1
test()

# -*- coding: utf-8 -*-
# Les imports
import time
import random
# ===========================================================

# Déclarations des variables globales.
event_type_architecture = " Le secteur de l'architecture. "
event_type_graphisme = " Le secteur du graphisme. "
event_type_developper = " Le secteur du développement. "
event_type_garage = " Le secteur de l'automobile. "
event_type_charpentier = " Le secteur de la charpentrie. "
event_type_avocat = " Le secteur des avocats. "
event_type_medecin = " Le secteur des médecins "

# event_nb_secteurs HERE !
event_tt = [random.randint(1,6)]
event_nb_secteurs = list(event_tt)

types_secteurs = [event_type_architecture , event_type_developper , event_type_graphisme
, event_type_garage , event_type_charpentier, event_type_avocat , event_type_medecin ]
types_secteurs_change = list(types_secteurs)
event_types_secteurs = random.choice(types_secteurs_change)

# ===========================================================

# differents events
    
def event_crise_economique():   
    print(" \n Une crise économique sévira dans " + str(event_nb_secteurs) +
# I want event_nb_secteurs to go to his initial value wich is random.randint(1,6) but doesnt work always print same event_nb_secteurs number.
          " secteurs qui sont....\n")
    print(event_nb_secteurs)
    time.sleep(5)
    event_types()
    
def event_coupure_electricite():
    print(" \n Une coupure de courant va arriver dans " + str(event_nb_secteurs) +
          " secteurs qui sont.... \n")
    time.sleep(5)
    event_types()

def event_types():
    global types_secteurs_change
    global event_nb_secteurs
    if event_nb_secteurs == 0 : 
        quit
    for ev_types in range(event_nb_secteurs[0]) :
        event_types_secteurs = random.choice(types_secteurs)
        if event_types_secteurs in types_secteurs_change :
            print(event_types_secteurs)
            types_secteurs_change.remove(event_types_secteurs)
    event_nb_secteurs = list(event_tt)
    types_secteurs_change = list(types_secteurs)
    
# Le vrai event :    
def event ():  
    random_event = False
    nb_hasard = random.randint(9,11)
    if nb_hasard >= 9 :
        print("\n Oh non ! un évènement va arriver !")
        event_random = random.randint(1,4)
        if event_random == 1 :
            event_coupure_electricite()
        elif event_random == 2 :
            event_crise_economique()
        else : 
            print("C bon y a r")


for i in range(10):
    event()

Jak powiedziałem, musisz skupić się tylko na imprezy_nb_secteurs, który jest problemem. Chciałbym, żeby pójść jego wartość początkową, która jest: Random.Randint (1,6), ale nie działa

0
iKoSw3aP 10 październik 2020, 12:05

1 odpowiedź

Najlepsza odpowiedź

Robiąc time_change = time_1, zmienna time_change wskazuje na tę samą listę wskazującą time_1, to tylko alias, głównie chcesz wykonać kopię

time_1 = [1, 2, 3, 4, 5]
time_change = list(time_1)

def test():                    # no need to pause the code, it runs the same without
    global time_change
    time_change.remove(1)
    print(time_change)

    time_change = list(time_1)
    print(time_change)

>> test()
[2, 3, 4, 5]
[1, 2, 3, 4, 5]
1
azro 10 październik 2020, 09:08