#!/usr/bin/env python3 import sys """ Rozwiązanie zadania 6 z https://brain.fuw.edu.pl/edu/index.php/PPy3/Wej%C5%9BcieWyj%C5%9Bcie Niech program znajduje wszystkie słowa, jakie można utworzyć korzystając z danego zestawu liter (podanego jako pierwszy argument na linii poleceń); tzn. tak jak w Scrabble dysponujemy takimi literami i w takiej liczbie, jakie składają się na to słowo (lub "słowo"). Źródłem słów jakie można utworzyć jest plik podany jako drugi argument (domyślnie - /usr/share/dict/words). """ argn=len(sys.argv) #liczba argumentów (+1 od nazwy programu) if argn == 3: klocki = sys.argv[1].upper() #klocki z literami do ułożenia słowa (.upper(), by uniezależnić się od wielkości liter) sciezka = sys.argv[2] #ścieżka do pliku ze słowami, które mamy spróbować ułożyć elif argn == 2: klocki = sys.argv[1].upper() sciezka = "/usr/share/dict/words" #nie podano pliku ze słowami, więc bierzemy domyślny else: sys.exit("Zła liczba argumentów!") #coś nie tak z liczbą argumentów - kończymy with open(sciezka) as plik: for slowo in plik: #dla każdego słowa w pliku (zakładamy, że każda linia to jedno słowo) #usuwamy ewentualny "whitespace" - znaki niedrukowalne (spacje, taby, koniec linii...) z początku i końca słowa: slowo_lista = list(slowo.strip().upper()) for litera in klocki: #przechodzimy przez wszystkie dostępne klocki if litera in slowo_lista: #jeśli litera z klocka jest zawarta w słowie... slowo_lista.remove(litera) #...usuwamy jej pierwszą znalezioną kopię ze słowa if not slowo_lista: #jeśli po wszystkim słowo-lista jest pusta, to znaczy, że da się to słowo ułożyć z klocków print(slowo.strip()) #znowu .strip(), by znaki końca linii (\n) nie psuły nam outputu