Chodzi o to, że if używa kodu ASCII do tego, żeby litery pomięzy A, a - Z, żeby zamienić litery na myślniki. Mógłby ktoś powiedzieć jak to poprawić, żeby nie wyrzucało błędu ?
- 120.png (24 KB) - ściągnięć: 750
Po pierwsze, piszesz w Pythonie, a kod wygląda jak z C. Zamiast for i in range(0, len(tekst)):
znacznie wygodniej jest pisać for char in tekst:
. W takim wypadku masz od razu dostęp do każdego znaku.
Po drugie, masz coś nie tak z warunkiem. Brakuje znaków nierówności dla małych liter oraz zakresy są przesunięte o 1 w złą stronę. Dodatkowo, jeśli to nie jest wymóg, prościej (i przejrzyściej) jest sprawdzić, czy litera jest w string.ascii_letters (trzeba zaimportować moduł string). Dzięki temu warunek będzie wyglądał tak if tekst[i] in string.ascii_letters:
w Twojej wersji lub tak if letter in string.ascii_letters:
w mojej.
Po trzecie, jak już @stivens wspomniał, stringi są immutable, więc przydałoby się zbudować nowego. Można przykładowo stworzyć pustą listę przed pętlą, a następnie dodawać do niej litery. Po wszystkim łączysz listę za pomocą "".join(lista)
i masz gotowego nowego stringa. Teoretycznie da się zamiast listy stworzyć pustego stringa i dodawać do niego po kolei litery, ale jest to mało wydajne, ponieważ z każdym dodawaniem jest tworzony nowy obiekt string.
Tak więc trochę bardziej Pythonowy kod wyglądałby tak:
temp = []
for char in tekst:
if (65 <= ord(char) <= 90) or (97 <= ord(char) <= 122): # Lub char in string.ascii_letters
temp.append('-')
else:
temp.append(char)
tekst = "".join(temp)
A jeszcze bardziej
import string
tekst = "".join(['-' if char in string.ascii_letters else char for char in tekst])
@maciekniewielki:
jeszcze lepsza wersja warunku:
if 'A' <= char <= 'Z' or 'a' <= char <= 'z':
Hasło: "python replace chars outside of range"
Wynik:
https://stackoverflow.com/questions/13060254/replace-any-character-outside-of-the-english-alphabet-in-python
Jest jeszcze jedna metoda:
#Przykład
>>> "".join(lett for lett in "abccde23432" if lett.isdigit())
'23432'
#Użycie warunku lewostronnie jeśli nie chcesz pomijać elementów.
>>> text = input("Wpisz coś: ")
Wpisz coś: A tutaj podajemy twój tekst do 'wymyślnikowania'.
>>> "".join('-' if 'a' <= char.lower() <= 'z' else char for char in text)
"- ----- -------- --ó- ----- -- '----ś----------'."
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.