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

IndexError: list index out of range

Object Storage Arubacloud
0 głosów
1,554 wizyt
pytanie zadane 2 listopada 2019 w Python przez KitoPlayerPL Nowicjusz (150 p.)

Cześć, mam pracę domową o następującej treści:

Liczba ciekawacyfrowo, to co najmniej dwucyfrowa liczba naturalna, w której każde dwie cyfry stojące bezpośrednio obok siebie są różne. Na przykład liczba 34542  jest ciekawacyfrowo, a liczba 14483 nie jest ciekawacyfrowo.

Napisz program, który wypisze długość (liczbę wyrazów) najdłuższego podciągu stojących obok siebie liczb ciekawocyfrowych w tym ciągu dla przedziału (10,10000)

Do tej pory udało mi się sklecić coś takiego:

from random import randint
a=10
b=10000
n=(int(input("Ile jest liczb? ")))
t=[]
for i in range (n):
    t.append(randint(a,b))
print(t)

def ciekawacyfrowo(t):
    k=0
    d=len(t)
    while k<d:
        if (t[k])==(t[k+1]):
            return False
        else:
            k=k+1
    return True

print(ciekawacyfrowo(t))

i=0
dł=1
dł_max=1

while (i<n-1):
    if ciekawacyfrowo(n):
        dł=dł+1
    else:
        if(dł_max<dł):
           dł_max=dł
        dł=1
    i=i+1
print(max(dł_max,dł))

 

Problem stanowi jednak niezrozumiały błąd:

if (t[k])==(t[k+1]):
IndexError: list index out of range

Podejrzewam jakieś niedokładności w użyciu zmiennych t i n  oraz w samej nowo definiowanej funkcji :/

Za wszelkie wskazówki z góry dziękuję

 

 

 

 

 

1 odpowiedź

+1 głos
odpowiedź 2 listopada 2019 przez obl Maniak (51,280 p.)
wybrane 2 listopada 2019 przez KitoPlayerPL
 
Najlepsza

Przecież napisane jest, że przekroczyłeś wskaźnik tablicy i próbujesz się odwołać do lokalizacji spoza zakresu a dzieje się tak bo tu:

t[k+1]

w momencie, gdy n = len(t) - 1 to k + 1=len(t) i już wykraczasz poza zakres tablicy. Ot i cała historyja!

komentarz 2 listopada 2019 przez KitoPlayerPL Nowicjusz (150 p.)

Ok, dzięki... sprawę definicji funkcji załatwiła zmiana na

while k<d-1

Bo faktycznie błąd wyskakiwał dla liczb, których dwie ostatnie cyfry się nie różniły i k=k+1 wykraczało poza zakres...

Jedynym teraz problemem pozostaje określenie int/inputów dla n, bo wyświetla się błąd, że dla:

if ciekawacyfrowo(n):

oraz

d=len(t)
TypeError: object of type 'int' has no len()

Jak zatem w jednym programie "pogodzić" te dwie relacje funkcji, żeby liczby ciekawecyfrowo zdefiniowane bez "inta" wyszukać z wylosowanego zbioru n liczb z "intem"  ???

Podobne pytania

0 głosów
1 odpowiedź 893 wizyt
pytanie zadane 6 czerwca 2019 w Python przez Ventre90 Obywatel (1,170 p.)
+1 głos
1 odpowiedź 284 wizyt
0 głosów
1 odpowiedź 133 wizyt
pytanie zadane 6 kwietnia 2021 w C i C++ przez 0Brzoza0 Nowicjusz (120 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...