p.....k
p.....k
#python #naukaprogramowania

def is_isogram(string):
....lower = string.lower()
....for i in lower:
........if lower.count(i) > 1:
............return False
............break
........else:
............return True
............break

kolejne ćwiczenie, sprawdzanie czy wyraz jest isogramem, czyli litery się nie powtarzają... wywala mi błąd przy stringu costam-costam , ten myślnik jest traktowany jako początek nowego słowa, ale jakoś .strip('-') nie chce działać...

poza tym chyba te breaki jakieś dziwne są, w sensie jakoś da się inaczej, ale już chyba dziś nic nie wymyślę.
  • Najlepsze
  • Wszystkie komentarze
croppz
@ponuryrolnik: działa, tylko inaczej niż ci się wydaje. Zajrzyj do dokumentacji. Jak już będziesz o metodach stringów czytał to obczaj przy okazji isalpha().
ProfesorBigos
strip() mi jakoś nie działa, albo źle coś wpisuję. strip('-')


@ponuryrolnik: str.strip([chars]) Return a copy of the string with the leading and trailing characters removed.
croppz
@ponuryrolnik: unique_chars = {chr for chr in input_string if chr.isalpha()}
ProfesorBigos
@ponuryrolnik: śmiem twierdzić, że to nie działa :-P funkcja sprawdzi tylko pierwszą literę
p.....k
p.....k
@ProfesorBigos: zaraz sprawdze, u mnie działało
p.....k
p.....k
@ProfesorBigos: no, nie działa
Elodin
@ponuryrolnik: Można to ogarnąć krócej ;)

def is_isogram(string):
return len(set(string.lower())) == len(string)
p.....k
p.....k
co robi set?
Elodin
@ponuryrolnik:

Syntax : set(iterable)

Parameters : Any iterable sequence like list, tuple or dictionary.


Returns : An empty set if no element is passed. Non-repeating element iterable modified as passed as argument.
p.....k
p.....k
@Elodin:

def is_isogram(string):
....lower = string.lower()
....count = 0
....for i
croppz
no ale set, faktycznie lepsze. no ale: wywala się na:


"Emily Jung Schwartzkopf"

"six-year-old"


@ponuryrolnik: nie wywala się, tylko powtarzają się spacje i myślniki. Możesz przed porównywaniem przefiltrować stringa i wywalić z niego wszystko poza literami.
p.....k
p.....k
@croppz: strip() mi jakoś nie działa, albo źle coś wpisuję. strip('-')
p.....k
p.....k
@croppz: ty chyba musisz być programistą na co dzień:

nie wywala się

działa, tylko inaczej niż ci się wydaje


:)
p.....k
p.....k
@croppz: może być?
lower = string.lower().replace("-","").replace(" ","")
croppz
@ponuryrolnik: nie wiem, zależy od treści zadania. Jeżeli funkcja ma ignorować wszystko poza literami to tak niezbyt, kilkadziesiąt wywołań replace z kolejnymi znakami też zbyt rozsądne nie jest. Sprawdzałeś co robi funkcja string.isalpha? A jeżeli ma ignorować tylko znaki z jakiejś konkretnej listy to zamiast dwa razy replace można użyć string.traslate.
p.....k
p.....k
@croppz: tylko, że isalpha zwraca true or false, próbowałem uzyć tego filter(str.isalpha, string) ale bez sukcesu
croppz
filter(str.isalpha, string)


@ponuryrolnik: zresztą to też powinno działać
p.....k
p.....k
@croppz:
ale print(list(filtered)) działa
croppz
@ponuryrolnik: no, filter zwraca generator. Tak samo jak chociażby range(), zip() i właściwie większość funkcji z biblioteki standardowej. Możesz sobie po nim przeiterować albo przekazać go do jakiegoś konstruktora przyjmującego iterable, tak jak to zrobiłeś z list().