Mam ten kod, który znajduje największy indeks określonego znaku w ciągu, jednak chciałbym, aby podniósł a, ValueError
gdy określony znak nie występuje w ciągu.
Więc coś takiego:
contains('bababa', 'k')
spowodowałoby:
→ ValueError: could not find k in bababa
W jaki sposób mogę to zrobić?
Oto aktualny kod mojej funkcji:
def contains(string,char):
list = []
for i in range(0,len(string)):
if string[i] == char:
list = list + [i]
return list[-1]
Odpowiedzi:
raise ValueError('could not find %c in %s' % (ch,str))
źródło
raise ValueError
zamiast tegoraise ValueError()
?Oto poprawiona wersja twojego kodu, która nadal działa, a ponadto pokazuje, jak podnieść
ValueError
poziom tak, jak chcesz. Swoją drogą, myślęfind_last()
,find_last_index()
lub coś podobnego byłoby bardziej opisową nazwą tej funkcji. Dodatkowym utrudnieniem jest fakt, że Python ma już metodę obiektu kontenera o nazwie,__contains__()
która robi coś innego, testując członkostwo.Aktualizacja - znacznie prostszy sposób
Łał! Oto znacznie bardziej zwięzła wersja - zasadniczo jednolinijkowa - która prawdopodobnie jest również szybsza, ponieważ odwraca (przez
[::-1]
) ciąg przed wykonaniem wyszukiwania w przód w nim w poszukiwaniu pierwszego pasującego znaku i robi to przy użyciu szybkiej wbudowanejindex()
metody łańcuchowej . Odnosząc się do twojego rzeczywistego pytania, miłym małym ułatwieniem związanym z używaniemindex()
jest to, że już podnosi się,ValueError
gdy podciąg znaku nie jest znaleziony, więc nic więcej nie jest wymagane, aby to się stało.Tutaj jest wraz z szybkim testem jednostkowym:
źródło
for
pętli. 1. funkcja: FAIL dlacontains('foo', 'f')
.for
pętli w odpowiedzi, chociaż zdarza się, że pojawia się w ich własnym kodzie. Tak czy inaczej mój 1. Funkcja Pokazuje im, jak gdy znak nie zostanie znaleziony, która jest co prosili. i zilustrowałem, jak to zrobić w kontekście pliku . Nawet jeśli z jakiegoś powodu chcą , myślę, że inni mogą uznać drugą wersję bez jednej przynajmniej za nieco interesującą.raise
ValueError
for
for
for
pętli, to nie w sposób odpowiedzieć na pytanie o rzeczywiste Jak gdy postać nie znajduje się w ciąg - mianowicie wywołując coś innego, że zrobi to za Ciebie. Istnieje również perspektywa, że OP może poradzić sobie ze swoim naprawieniem lub czymkolwiek to jest po zobaczeniu rozwiązania sans lub późniejszym zaznajomieniu się z Pythonem.raise
ValueError
for
for
źródło
źródło