Wpis z mikrobloga

#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ę.
  • 20
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
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.
  • Odpowiedz
@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.
  • Odpowiedz
@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().
  • Odpowiedz