• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

LNU, Ćwiczenie: skoki do wody - PYTHON

Object Storage Arubacloud
+1 głos
375 wizyt
pytanie zadane 14 kwietnia 2022 w Python przez mewtwo Użytkownik (830 p.)

Język PYTHON,

nie wiem jak podejść do tego zadania, może jakieś pomysły ? 

Kod: 

def sumUp( args ):
    return 0



do funkcji sumUp() przez parametr przekazano listę zawierającą serie ocen sędziowskich pewnej liczby zawodników w konkursie skoków do wody. Lista zawiera wszystkie oceny wszystkich zawodników w taki sposób, że pierwszych pięć elementów to oceny pierwszego zawodnika, kolejnych pięć elementów - drugiego zawodnika itd.

Funkcja powinna po każdej serii danych dotyczących jednego zawodnika dodać do listy ocenę końcową tego zawodnika, powstałą przez zsumowanie jego ocen po odrzuceniu oceń skrajnych: największej i najmniejszej.

Przykład:

Wejście: [ 4, 5, 5, 6, 5, 4, 5, 4, 5, 5, 3, 3, 5, 2, 4]
Wyjście: [ 4, 5, 5, 6, 5, 15, 4, 5, 4, 5, 5, 14, 3, 3, 5, 2, 4, 10 ]

1 odpowiedź

0 głosów
odpowiedź 14 kwietnia 2022 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 15 kwietnia 2022 przez mewtwo
 
Najlepsza

Wiele zależy od tego jak chcesz podejść do tego zadania. W takim klasycznym, imperatywnym wariancie, zrobiłbym po prostu pętlę o kroku wynoszącym 5, wewnątrz której byłbyś w stanie wyciągać oceny przyznane każdemu zawodnikowi. Do tego warto zrobić osobną funkcję, do której przekaże się taki pięcioelementowy ciąg ocen, a ona zwróci ostateczną ocenę (wystarczy posortować i użyć [1:-1], aby odrzucić skrajne wartości; następnie wynik zsumować). No i ostateczne wyniki możesz zapisywać w nowej tablicy.

Ja osobiście najchętniej dzieliłbym ciąg znaków na części o danym rozmiarze taką funkcją:

def chunks(n, iterable):
	args = [iter(iterable)] * n
	return zip(*args)

i później dalej to dalej przetwarzał, a na końcu złączył wszystko w jedną listę/

komentarz 14 kwietnia 2022 przez mewtwo Użytkownik (830 p.)

Na razie udało mi się wymyślić coś takiego: 

def sumUp( args ):
    
    result = []
    suma = 0
    j = 0
    
    for i in range(len(args)): 
        
        if j % 5 == 0: 
            j = 0
            result.append(suma)
        else: 
            suma += args[i]
            result.append(args[i])
            j += 1
            
    return result
    

Jednak zwraca tylko wartość zero. 

komentarz 14 kwietnia 2022 przez VBService Ekspert (253,140 p.)
edycja 14 kwietnia 2022 przez VBService

Zapisując zmienna j w ten sposób

        if j % 5 == 0: 
            j = 0
            result.append(suma)
        else: 
            suma += args[i]
            result.append(args[i])
            j += 1

j stała się częścią warunku.

def sumUp( args ):
     
    result = []
    suma = 0
    j = 0
     
    for i in range(len(args)): 
         
        if j % 5 == 0: 
            j = 0
            result.append(suma)
        else: 
            suma += args[i]
            result.append(args[i])

        j += 1
             
    return result

 

Python na "wcięciach"  (tabulatorach) "stoi"  wink

 

Druga sprawa j=0 spełnia warunek j % 5 == 0, więc lista będzie ""ucinana" o 1, przy każdym j=0

komentarz 14 kwietnia 2022 przez mewtwo Użytkownik (830 p.)

Program źle zlicza sumę. Oraz o co chodzi z "Python na "wcięciach"  (tabulatorach) "stoi"  wink"

Poprawiony kod: 

def sumUp( args ):
    
    result = []
    suma = 0
    j = 1
      
    for i in range(len(args)): 
          
        if j % 5 == 0: 
            j = 1
            result.append(suma)
        else: 
            suma += args[i]
            result.append(args[i])
 
        j += 1
              
    return result

Przykłodowe dane: 

sumUp([7, 1, 2, 8, 2, 9, 1, 9, 3, 5, 5, 6, 8, 4, 5, 0, 7, 4, 0, 9, 10, 6, 0, 6, 8]):

Result: [7, 1, 2, 8, 18, 9, 1, 9, 37, 5, 5, 6, 53, 4, 5, 0, 62, 4, 0, 9, 75, 6, 0, 6, 87]

Expected: [7, 1, 2, 8, 2, 11, 9, 1, 9, 3, 5, 17, 5, 6, 8, 4, 5, 16, 0, 7, 4, 0, 9, 11, 10, 6, 0, 6, 8, 20]

1
komentarz 14 kwietnia 2022 przez Eryk Andrzejewski Mędrzec (164,260 p.)

A czy nie byłoby lepiej zrobić coś w tym rodzaju?

# x to jakaś tablica
for i in range(0, len(x), 5):
    scores = x[i:(i + 5)]

 

1
komentarz 14 kwietnia 2022 przez VBService Ekspert (253,140 p.)

Albo wręcz zapisać do postaci: list comprehension

 

przykład  [ on-line

def chunks(d, s):
	return [d[i: i+s] for i in range(0, len(d), s)]

input_data = [ 4, 5, 5, 6, 5, 4, 5, 4, 5, 5, 3, 3, 5, 2, 4 ]
print(chunks(input_data, 5))

 

Podobne pytania

0 głosów
2 odpowiedzi 553 wizyt
pytanie zadane 14 kwietnia 2022 w Python przez mewtwo Użytkownik (830 p.)
0 głosów
2 odpowiedzi 415 wizyt
pytanie zadane 27 maja 2023 w Python przez agantka Nowicjusz (150 p.)
0 głosów
1 odpowiedź 590 wizyt
pytanie zadane 14 kwietnia 2022 w Python przez mewtwo Użytkownik (830 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...