Zakrzewiaczek Napisano Marzec 27, 2023 Udostępnij Napisano Marzec 27, 2023 Dzień dobry, do szkoły tworze program, który zapisuje imię i nazwisko osoby biorącej udział w imprezie sportowej oraz zapisuje jej wyniki. Natomiast mam problem z funkcją (klasa wynik funkcja pokaz_wyniki), która odpowiedzialna jest za wybieranie najlepszych osób. Program zapisuje w tablicy ilosc_najlepszych_wynikow ilość wyników, w których dany zawodnik jest najlepszy. Każda komórka przechowuje tę ilość dla każdego osoby. Natomiast dalej jest problem polegający na tym, że kiedy mamy powyżej 2 osób biorących udział, program poprawnie pokazuje najlepszą osobę, natomiast 2 i 3 miejsce jest pokazywane błędnie. Program jest napisany w języku Python 3.11. Poniżej podaję kod. Dziękuję za pomoc. osoby = list() wyniki = list() #skoki przez płotki, siatkówka, tenis ziemny, tenis stołowy, rugby ilosc_najlepszych_wynikow = list() nazwy = ["Skoki przez płotki (w s)", "Siatkówka (wygrane sety)", "Tenis ziemny (wygrane sety)", "Tenis stołowy (wygrane sety)", "Rugby (punkty)"] class osoba(): def dodaj(): print("Podaj nazwe osoby: ") osoby.append(input()) for i in range(5): print(nazwy[i]) wyniki.append(int(input())) print("Dodano pomyślnie") def wyczysc(): osoby.clear() wyniki.clear() print("Wyczyszczono pomyslnie") def pokaz_liste(): poz = 0 if(len(osoby) != 0): print("imię i nazwisko | ", end="") for i in range(4): print(nazwy[i], end=" | ") print(nazwy[4], end="\n\n") for i in range(len(osoby)): print(osoby[i], end=" | ") for a in range(4): print(wyniki[i*5+a], end=" | ") print(wyniki[i*5+4]) print("\n\nTo już wszystko...\n") else: print("Brak") class wynik(): def pokaz_wyniki(): ilosc_najlepszych_wynikow.clear() for i in range(len(osoby)): ilosc_najlepszych_wynikow.append(0) najlepsze_wyniki = list() wartosci = list() for a in range(5): wartosci.clear() for i in range(len(osoby)): wartosci.append(wyniki[(i*5) + a]) if(a != 0): najlepsze_wyniki.append(max(wartosci)) else: najlepsze_wyniki.append(min(wartosci)) for a in range(5): for i in range(len(osoby)): if(najlepsze_wyniki[a] == wyniki[i*5+a]): ilosc_najlepszych_wynikow[i] += 1 if(len(osoby) > 3): a = 3 elif(len(osoby) > 0): a = len(osoby) else: print("Brak osob") a = -1 osoby_sort = list() #od tego miejsca program działa niepoprawnie for i in range(a): osoby_sort.append(osoby[ilosc_najlepszych_wynikow.index(max(ilosc_najlepszych_wynikow))]) del ilosc_najlepszych_wynikow[ilosc_najlepszych_wynikow.index(max(ilosc_najlepszych_wynikow))] for i in osoby_sort: print(osoby_sort, end=" | ")
ethanak Marzec 27, 2023 Udostępnij Marzec 27, 2023 Po pierwsze: w Ptrhonie nie ma tablic, są listy i krotki, a to zupełnie coś innego. Po drugie: dla list istnieje metoda sort() - poczytaj o jej parametrach, szczególnie o funkcji jako parametr. 1
Zakrzewiaczek Marzec 28, 2023 Autor tematu Udostępnij Marzec 28, 2023 @ethanak lista i Tablica to to samo, dzięki za pomysł, spróbuję go wsadzić. Zresztą krótka tu by była bez sensu, gdyż w razie pomyłki trzeba by było usuwać zawartość i jeszcze raz ją dodawać.
ethanak Marzec 28, 2023 Udostępnij Marzec 28, 2023 2 godziny temu, Zakrzewiaczek napisał: lista i Tablica to to samo Nie!!! Za takie stwierdzenie u mnie dostałbyś pałę. A jako że stopnia nie mogę wystawić, proponuję za karę dowiedzieć się czym się różni lista od tablicy 1
kasjo Marzec 28, 2023 Udostępnij Marzec 28, 2023 A nie możesz przechowywać danych w ten sposób? wyniki={'gracz1': 14, 'gracz2': 45, 'gracz3': 1} Potem tylko posortować sorted(wyniki.items(), key=lambda x:x[1], reverse=True) I 1
Zakrzewiaczek Marzec 28, 2023 Autor tematu Udostępnij Marzec 28, 2023 @ethanak jednak nie jest to samo 5ak jak mówiłeś . Zgodnie z waszymi radami dałem sortowanie z Reverse na True, i udało się! Dziękuję za pomoc. Zmieniony kod wygląda tak: ilosc_najlepszych wynikow_sort= list() ilosc_najlepszych wynikow_sort = ilosc_najlepszych wynikow.copy() 11osc_najlepszych wynikow_sort.sort (reverse=True) for i in range (len (osoby)): print (1+1, "miejsce:", osoby [ilosc_najlepszych wynikow.index (ilosc_najlepszych wynikow_sort[i])])
ethanak Marzec 28, 2023 Udostępnij Marzec 28, 2023 (edytowany) Zamiast copy + sort możesz po prostu użyć funkcji sorted, która tworzy posortowaną kopię listy. Coś w stylu: ilosc_najlepszych wynikow_sort = sorted(ilosc_najlepszych wynikow, reverse=True) Poza tym ja bym po prostu posortował listę osoby, coś w stylu: osoby_sort = sorted(osoby, key=???) W miejsce "???" podstaw sobie jakąś fajną funkcję Edytowano Marzec 28, 2023 przez ethanak 1
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »