Funkcja sum() w klasach

Funkcja sum() w klasach
P7
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:75
0

Witam ponownie po dłuższym czasie.... W poniższym kodzie zrobionym w klasie, mam problem z samym sumowaniem liczb dodanych do magazynu. Nie sumuje mi po prostu(suma łaczna wynosi: 0). Co przeoczyłem w tej klasie Magazyn ? Niby prosty , króciutki kod . Błedu nie mam żadnego w trakcie wykonywania kodu.

Kopiuj
class Magazyn:
    magazyn = []

    def DodanieDoMagazynu(self,dodanie):
        self.magazyn.append(dodanie)
        print (f'Dodałeś do magazynu: {dodanie}')
        print(self.magazyn)
    
    def sumamagazyn(self):
        self.magazyn = []
        suma = sum(self.magazyn)
        
        print(f'Suma łaczna wynosi: {suma}')
        

while True:
    zloze = Magazyn()
    zloze.DodanieDoMagazynu(input('Podaj liczbę: '))
    zloze.sumamagazyn()
edytowany 1x, ostatnio: Riddle
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 18 godzin
6
Kopiuj
self.magazyn = []
suma = sum(self.magazyn)

No ciekawe czemu jest tutaj zero elementów... zupełnie jakbyś ustawiał magazyn na pusty ;)

Czyścisz magazyn sobie za każdym wywołaniem sumamagazyn().

Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 10 godzin
  • Postów:1607
5

A oprócz tego, co Ktoś napisał wyżej, input zwraca stringa, nie liczbę. Zatem wkładasz do magazynu stringi — napisy — a nie liczby, i potem próbujesz sumować te napisy.

Nie wiem, co by miała oznaczać suma dowolnych napisów. Python też nie wie, więc jak będziesz miał niepusty magazyn napisów, to się wywali na sumowaniu.

edytowany 1x, ostatnio: Althorion
SP
Szalony Programista2
Stringi mają przeciążony operator dodawania, który concatenuje napisy, bez problemu można zsumować listę stringów. Ale wywali się na sum() funkcji tylko dlatego, że nie ma operacji na sumowanie intów ze stringami, a początkowa wartość sumy jest intem równym 0, a przy ustawieniu default pustego stringa i tak jakiś if wyłapie nie korzystanie z tego dla stringów.
P7
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:75
1

Dzięki Wam za wskazówki... Gapa ze mnie. Szczególnie z tym co podpowiedział @Althorion , i zmyliło mnie brak błędów , które miałem przy wywołaniu kodu . :) Teraz poprawiłem co trzeba i działa :)

Kopiuj
class Magazyn:
    magazyn = []

    def DodanieDoMagazynu(self,dodanie):
        self.magazyn.append(dodanie)
        print (f'Dodałeś do magazynu: {dodanie}')
        print(self.magazyn)
    
    def sumamagazyn(self):
        suma = sum(self.magazyn)
        
        print(f'Suma łaczna wynosi: {suma}')
        

while True:
    zloze = Magazyn()
    zloze.DodanieDoMagazynu(int(input('Podaj liczbę: ')))
    zloze.sumamagazyn()

Temat zamykam. Program działa jak należy. Dzięki jeszcze raz

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.