Wypisywanie słów nie zawierających danych liter

Wypisywanie słów nie zawierających danych liter
BornStubborn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Witam,
próbuję napisać program, który wypisuje słowa nie zawierające podanych przez użytkownika liter. Słowa znajdują się w pliku .txt. Napisany przeze mnie kod działa jedynie w przypadku podania jednej litery (lub ciągu liter) i tylko gdy słowo rozpoczyna się od niej. Chciałbym, żeby program opuszczał słowa zawierające dane litery bez znaczenia na jakiej pozycji w wyrazie się one znajdują, oraz działał przy podaniu więcej niż jednej litery

Kopiuj
def avoids():
    fin = open('words.txt')
    for line in fin:
        word = line.strip()
        if letter not in word:
            print(word)
        else:
            continue

letter = ('a')
avoids()
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
0

A nie możesz użyć funkcji find() i sprawdzać czy zwróci -1?

BornStubborn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0
jurek1980 napisał(a):

A nie możesz użyć funkcji find() i sprawdzać czy zwróci -1?

Próbuję zrobić to w taki sposób jak mówisz, ale coś robię nie tak.

Kopiuj
def avoids():
    fin = open('words.txt')
    for line in fin:
        word = line.strip()
        x = fin.find(letter)
        if x == True:
            print(word)
        else:
            continue

letter = ('a')
avoids()

Mógłbyś podpowiedzieć jak to poprawić?

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
1

https://www.w3schools.com/python/ref_string_find.asp
Funkcja zwraca pozycję szukanej frazy, w Twoim przypadku litery, albo -1 jeśli nie znalazł. Jak masz wypisać te słowa które nie zawierają danej litery w warunku sprawdzaj czy funkcja zwraca -1.

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Tak swoją drogą, to do takich rzeczy dużo lepszy jest AWK:

Kopiuj
awk '{if ($0 !~ /[abc]/) print}' filename.txt

Ta komenda wypisze Ci wszystkie linie z pliku prócz tych, które zawierają litery a, b, c.

  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
awk '{if ($0 !~ /[abc]/) print}' filename.txt
Kopiuj
awk '!/[abc]/' words.txt
sed '/[abc]/d' words.txt
grep -v '[abc]' words.txt
perl -ne 'print if !/[abc]/' words.txt
ruby -ne 'print if !/[abc]/' words.txt
DJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 35
0
Kopiuj
for word in words: 
  _filter = lambda word, f=forbidden: any(map(lambda item: item in word, f)) 
    if not _filter(word, forbidden): 
        print(word)

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.