Problem z tworzeniem nowej klasy

0

Witam. Z góry przepraszam za wszystkie błędy jakie tutaj popełnię.
Robię pierwszy projekt w pythonie po opanowaniu jakiś tam podstaw.
Byłby on przeznaczony dla firmy kurierskiej. Cel jest taki, aby program wyświetlał dane kurierów i klientów, pozwalał na dodawanie nowych, usuwanie ich oraz edytowanie ich danych.
Nie wiem jak dokładnie opisać mój problem, ale chodzi mi o to, żeby w trakcie tworzenia nowego kuriera zapisywał się on jako "kurier_3", gdy tworzę jeszcze następnego "kurier_4" itd.

Druga sprawa. To chciałem aby program liczył kurierów i klientów, ale gdy tworzę jakąś zmienną i próbuję ją zmieniać podczas metody magicznej init wyskakuje mi błąd "UnboundLocalError: local variable 'liczba_kurierów' referenced before assignment"

Załączam fragment kodu, który niestety nie jest jeszcze kompletny, ale myślę, że wyjaśniłem o co chodzi i dacie radę mi pomóc.

print("Co chcesz zrobić?")

liczba_kurierów = 0

class Person():
    def __init__(self, name, surname, age):
        self.name = name
        self.surname = surname
        self.age = age

class Client(Person):
    def __init__(self,name,surname,rodzaj_paczki,adres):
        super().__init__(name,surname,age=0)
        self.rodzaj_paczki = rodzaj_paczki
        self.adres = adres
        self.wszystko = [name, surname, rodzaj_paczki, adres]




class Courier(Person):
    def __init__(self,name,surname,age,position):
        super().__init__(name,surname, age)
        self.position = position
        self.wszystko = [name,surname,age,position]
        liczba_kurierów += 1  <==== Tutaj Wywala błąd



kurier_1 = Courier("Adam","Wysocki",27,"Młodszy")


kurier_2 = Courier("Michał", 'Wahadło',39,'Starszy')

klient_1 = Client('Jan', 'Zamoyski', 'list polecony ekonomiczy', 'Starachowice')

klient_2 = Client('Ryszard','Lena','paczka priorytet', 'Wąchock')


while True:
    print('Wciśnij "E", aby edytować dane')
    print('Wciśnij "K" by zobaczyć dane kuriera')
    print('Wciśnij "O" by zobaczyć dane odbiorcy')
    kontunuacja = input()
    if kontunuacja == "O" or kontunuacja == 'o':
        print("liczba klientów:", end='')
        print(klienci)
        print(klient_1.wszystko)
        print(klient_2.wszystko)

        break


    elif kontunuacja == "K" or kontunuacja == 'k':
        print("liczba kurierów:", end='')
        print(kurierzy)
        print("Imię: ",end='')
        print(kurier_2.name)
        print("Nazwisko: ", end='')
        print(kurier_2.surname)
        print("Stopień: ", end='')
        print(kurier_2.position)
        print("Wiek: ", end='')
        print(kurier_2.age)
        print('')
        print('')
        print("Imię: ", end='')
        print(kurier_1.name)
        print("Nazwisko: ", end='')
        print(kurier_1.surname)
        print("Stopień: ", end='')
        print(kurier_1.position)
        print("Wiek: ", end='')
        print(kurier_1.age)
        break

    elif kontunuacja == 'E' or kontunuacja == 'e':
        print("Napisz:")
        print('"+k", by dodać kuriera')
        print('"+o", by dodać odbiorcę')
        edycja = input()
        if edycja == '+K' or edycja == '+k':
            print('wpisz imię')
            imię = input()
            print('wpisz nazwisko')
            nazwisko = input()
            print('wpisz wiek')
            wiek = input()
            print('wpisz stanowisko')
            stanowisko = input()

           Tutaj właśnie pojawia się problem i nie bardzo wiem w jaki sposób go rozwiązać...
            print('wpisz nazwę kuriera')
            kk = input()
            kk = Courier(imię,nazwisko,wiek,stanowisko)
            print('dodałeś nowego kuriera')
            print(kurier_3.wszystko)




    else:
        print("Wciśnij O, lub K")
        continue
0

No z tym błędem to rzeczywiście mogłem sam sobie znaleźć, ale dzięki za użycie google za mnie. XD
Postaram się jutro poczytać o kolekcji danych. Dzięki.

0
fasadin napisał(a):

jezeli chodzi o drugie

https://www.google.nl/search?q=UnboundLocalError%3A+local+variable+referenced+before+assignment+init&oq=UnboundLocalError%3A+local+variable+referenced+before+assignment+init&gs_l=psy-ab.3...69903.70866.0.71097.5.5.0.0.0.0.126.461.2j3.5.0....0...1.1.64.psy-ab..0.3.237...0i19k1j0i22i30i19k1.-dWZrtFr6gI

https://stackoverflow.com/questions/18002794/local-variable-referenced-before-assignment-in-python

jezeli chodzi o pierwsze to zainteresuj sie kolekcja danych. POzniej iterujac po takiej kolekcji mozesz dodawac zmienna (ktora zwiekszasz w petli) i dodawac na koniec stringa, w ten sposob mozesz to wyswietlic

Ok. Z tego co mówisz, to mogę zrobić coś takiego.

kurierzy = (kurier_1, kurier_2)
lk=1
for kurier in kurierzy:
    lk+=1
nowy_kurier = "kurier_"
            nowy_kurier += str(lk)
print(nowy_kurier)

Ale ja chciałbym, aby zmienna, którą stwarzam miała różną nazwę w zależności od tego ile elementów mieści się w liście "kurierzy".

0

Zainteresuj się słownikami, to pary elementów napis i w zasadzie cokolwiek. przez len(nazwa_slownika[nazwa_elementu]) uzyskasz "długość" listy, i będziesz mógł wykorzystać ją w nazwie. Pytanie tylko co jeśli będą 2 listy o tej samej liczbie elementów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1