python, pętla for
Ania: #python #for
Zadanie: Podziel string na pary znaków. Jeśli string zawiera nieparzystą liczbę znaków,
brakujący znak w ostatniej parze należy zastąpić podkreślnikiem ('...').
Mam rozwiązanie (poniżej), ale nie do końca rozumiem czerwony fragment i chcę to zapisać w inny
sposób (na zielono), gdzie popełniam błąd w rozumowaniu ?
def split
pairs(a):
if len(a) == 0:
return []
novo =
a[i:i + 2] for i in range(0, len(a), 2)
if len(novo[−1]) == 1:
novo[−1] = novo[−1] + '... '
return novo
def splitpairs(a):
l=len(a)
if l==0:
return []
for i in range(0,l,2):
novo=a[i:i+2]
if len(novo[−1])==1:
novo[−1]=novo[−1]+'...'
return novo
10 kwi 10:22
HGH: czerwony fragment 'wycina' dwuznakowe fragmenty w calym wyrazie czyli po prostu te pary o
których mowa w zadaniu i tworzy z nich liste, chyba brakuje tam nawiasow kwadratowych
10 kwi 13:13
Maciess: Czerwony fragment to konstrukcja listy. Nie zadziała w takiej formie jak wkleiłaś. Trzeba
czerwony kod umieścić w kwadratowych nawiasach.
Jeśli nie widziałaś nigdy takiego czegoś to zerknij do dokumentacji (
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions).
Z niezrozumienie tego fragmentu wziął twój błąd napisania tego. Bo w rozwiązaniu u góry, novo
to lista. A u ciebie novo to slice ze stringa. Zauważ, że w każdej iteracji novo dostaje nową
wartość, ale zawsze jest to string!
if len(novo[−1])==1:
Skoro novo to string, to novo[−1] będzie zawsze miało długość jeden. W efekcie twój program
powinien zwracać ostatni (albo przed) znak z napisu z dołączonymi kropeczkami. Spróbuj to
poprawić, tak aby novo było listą, a w pętli dodawaj do niego nowe slice.
Poniżej masz poprawiony kod twojego rozwiązania, ale radzę najpierw samemu spróbować.
https://pastebin.com/RQz8MWcN
10 kwi 13:21
Ania: Tak, fakt, przy czerwonym uciekły nawiasy kwadratowe. Dziękuję bardzo − juz rozumiem !
10 kwi 13:42