Commit 8cea2c2a by Patryk Czarnik

sortowanie z localami

parent b0bae201
# etap 1: w pętli prosimy użytkownika o wpisywanie kolejnych słów
# i dodajemy te słowa do listy tak długo, aż użytkownik wpisze pusty napis
lista = []
while True:
slowo = input('Podaj kolejne słowo: ')
if not slowo: break
lista.append(slowo)
print(lista)
print('Zebrane dane:', lista)
# etap 2: sortowanie listy
# funkcja sorted(zrodlo_danych) w wyniku zwraca nową listę z posortowanymi elementami
# a nie modyfikuje podanego źródła danych (źródłem może być lista, ale także dowolna inna rzecz "iterowalna")
# metoda .sort() , którą można wywołać na obieckie listy, zmienia kolejność wewnątrz listy
# sortowanie napisów domyślnie jest oparte o kody Unicode,
# z tego wynika, że "polskie litery" są umieszczone za literami łacińskimi, np. Ł jest za Z
lista.sort()
print('Posortowane 1:', lista)
# Aby posortować w oparciu o alfabet danego języka, trzeba wykonać dwa kroki
# 1) ustawić język porównywania tekstów w ustawieniach regionalnych
import locale
print('Lokale przed ustawieniem:', locale.getlocale(locale.LC_COLLATE))
locale.setlocale(locale.LC_COLLATE, 'pl_PL')
# to by oznaczało: użyj ustawień systemowych
# locale.setlocale(locale.LC_COLLATE, '')
print('Lokale po ustawieniu:', locale.getlocale(locale.LC_COLLATE))
# 2) Do operacji sortującej jako parametr key należy przekazać specjalną funkcję strxfrm
lista.sort(key=locale.strxfrm)
print('Posortowane 2:', lista)
# etap 3: w pętli użytkownik podaje numer pozycji, a program odczytuje element list
# z podanej pozycji lub informuje, że wyszliśmy poza zakres
# zróbmy tak, że sprawdzimy, czy użytkownik wpisal liczbę,
# a jeśli zamiast liczby wpisał 'koniec', to przerywamy program
while True:
s = input('Podaj nr pozycji: ')
if s.lower() == 'koniec':
break
try:
i = int(s)
print(f'Na pozycji {i} znajduje się {lista[i]}')
except IndexError:
print('Pozycja poza zakresem')
except ValueError:
print('Niepoprawna liczba')
print('Koniec programu')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment