Wyjaśnienie zadania ze stringów

0

Siema
Może mi ktoś wyjaśnić to zadanie? Mam napisać program który sprawdzi czy w podanym stringu znajdują się słowa 'not' i 'poor' i jesli 'not' następuje po 'poor' to mam zamienić 'not ... poor' na 'good' i zwrócić wyniki ciągu. Z góry dzięki

def not_poor(str1):
  snot = str1.find('not')
  spoor = str1.find('poor')
  

  if spoor > snot and snot>0 and spoor>0:
    str1 = str1.replace(str1[snot:(spoor+4)], 'good')
    return str1
  else:
    return str1
print(not_poor('The lyrics is not that poor!'))
print(not_poor('The lyrics is poor!'))

0

A z tym kodem co jest nie tak?

0

Nie wiem czy dobrze rozumiem, ale nie wiesz jak ten program działa i chcesz wyjaśnienia ?
Bo odpaliłem go w Jupyterz'e na szybko i wygląda że działa, doprecyzuj jeśli możesz.

1

Źle opisałeś bo z kodu wynika, że poor występuje po not a nie odwrotnie. Strzelam, że nie rozumiesz działania metody find() -> Zwraca index od którego dane słowo się zaczyna. Funkcja def not_poor() najpierw sprawdza czy następuje spełnienie warunku, tudzież index poor jest większy od indexu not (czyli poor występuje po not) + czy w ogóle te słowa występują (jesli nie to find() zwróci -1 - odsyłam do dokumentacji). Jeśli warunek jest spełniony to podmienia frazę zaczynając od indexu wystąpienia not a kończąc na indexie kończącym poor (spoor trzyma index zaczynający słowo a +4 to po prostu długość słowa co w wyniku da index końca wyrazu)

P.S jeśli chcesz aby funkcja działała odwrotnie tudzież not występuje po poor, to wystarczy zmienić znak większości na mniejszości dla spoor w pierwszej części warunku a potem w metodzie replace() zamienić spoor z snot i zmienić 4 na 3 ( bo len("not") == 3)

2
assert not_poor('Not rich. Not poor.') == ?
assert not_poor('not rich, but poor') == ?
assert not_poor('Not Rich, Not Poor, But Bla Bla.') == ?
assert not_poor('Bla bla nothing poorer than bla.') == ?
assert not_poor('Bla bla #notpoor on Instagram.') == ?

itd

1

Twój algorytm działa tak jak wspomniał wyżej kolega, ja jedynie dodam iż kod z komentarzami byś zrozumiał jak po kolei wykonuje się ten kod:

# Funkcja "not_poor(str1)"
# Przyjmuje 'string'a
def not_poor(str1):
  # Definiowanie dwóch wartości wewnętrznych
  # Które otrzumują 'string' z funkcji
  # Przy wykorzystaniu metody '.find(STR)'
  # Szukana określona z góry wewnątrz funkcji wartości
  # W tym wypadku snot -> 'not' i spoor -> 'poor'
  snot = str1.find('not')
  spoor = str1.find('poor')
  # Blok warunkowy
  # 'spoor' jeśli większy od 'snot' (TRUE) - otrzymujesz wartość TRUE bo jest większy do 'not'
  # i 'snot' większy od 0 - musi być większy od 0 - TRUE i 'spoor' większy od 0 też musi być TRUE
  # Wszystkie warunki spełnione
  if spoor > snot and snot>0 and spoor>0:
    # Zmienną 'str1' nadpisujesz i używasz metody '.replace()' która przyjmuje 2 argumenty (w zasadzie 3)
    # 1 argument - szukany ciąg , w tym wypadku 'string' i dwie wartości 'snot' i 'spoor'
    # 2 arument - podajemy 'string' - 'good' który ma zastąpić 1 arument
    str1 = str1.replace(str1[snot:(spoor+4)], 'that good')
    # Zwaracant 'str1' w funkcji
    return str1
  else:
    # Jeśli warunek jest FALSE zwracamy 'str1' bez ww. czynności.
    return str1

#Printujesz funkcję z podanymi zdaniami (string) i sprawdzasz czydziała
print(not_poor('The lyrics is not that poor!'))
print(not_poor('The lyrics is poor!'))

Zmodyfikuj (spróboj) Twój algorytm według wskazówek ww. przez kolegę ,a jeśli nie wpadniesz na pomysł jak to zrobić to napisz,.

1 użytkowników online, w tym zalogowanych: 0, gości: 1