Funkcja Input i Output

W programach często występuje potrzeba interakcji z użytkownikiem w celu pobrania danych lub zwrócenia rezultatu jakiegoś typu. Obecnie większość programistów używa pól dialogowych jako sposobu odpytnia użytkownia o dane wejściowe. Pomimo tego, że Python umożliwia tworzenie takich pól, o wiele prostszym rozwiązaniem jest użycie wbudowanej funkcji input, która pozwala zadać dowolne pytanie, a wartością zwracaną jest referencja do łańcucha znaków, który stanowi wprowadzoną odpowiedź.

Funkcja input w Python wymaga jednego parametru typu string. Jest on często nazywany napisem zachęty, gdyż zawiera pomocny tekst zachęcający użytkownika do wpisania czegoś oczekiwanego przez program np.:

aName = input('Please enter your name: ')

Cokolwiek użytkownik napisze, zostanie zapisane w zmiennej aName. Za pomocą funkcji input w prosty sposób możemy wyświetlić instrukcje, które odczyta użytkownik i odpowie przez wprowadzenie danych, które zostaną przetworzone w kolejnych etapach programu. W poniższym przykładzie pobrane imię zostało sformatowane do dużych liter i wyświetlone na ekranie wraz z podaniem jego długości.




The input Function Returns a String (strstuff)

Należy zauważyć, że wartość zwracana przez funkcję input jest stringiem, reprezentującym wszystkie znaki wprowadzone przez użytkownika po symbolu zachęty. W celu zinterpretowania go w inny sposób niż tekstowy musisz jawnie i świadomie zastosować konwersję typu. W wyrażeniach poniżej łańcuch znaków wpisany przez użytkownika został skonwertowany do typu liczbowego, zmienno przecinkowego, aby można było na nim przeprowadzić kolejne operacje arytmetyczne.

sradius = input("Please enter the radius of the circle ")
radius = float(sradius)
diameter = 2 * radius

Formatowanie Stringa

Zapoznaliśmy się już z funkcją print która pozwala na bardzo proste wyprowadzenie wartości rezultatu. Wywołać można z wieloma lub żadnym paramtetrem, które następnie wyświetlane są w kolejności, oddzielone domyślnym separatorem. Rodzaj znaku separatora można ustawić za pomocą argumentu sep. Ponadto, każda wyświetlona linia domyślnie zakończona jest znakiem nowej linii. To zachowanie można zmienić w podobny sposób jak separator przy użyciu argumentu end. Poniższa sesja pokazuje użycie powyższych funkcji:

>>> print("Hello")
Hello
>>> print("Hello","World")
Hello World
>>> print("Hello","World", sep="***")
Hello***World
>>> print("Hello","World", end="***")
Hello World***>>>

Gdy wymagana jest większa kontrola nad wyglądem wyświetlanego tekstu w Python z pomocą przychodzi tzw. string sformatowany. Jest to rodzaj szablonu, w którym stałe słowa i przerwy połączone są z symbolami reprezentującymi zmienne, w miejsce których po wywołaniu print zostaną wstawione ich wartości. Dla przykładu wyrażenie:

print(aName, "is", age, "years old.")

zawiera stałe słowa is i years old, ale imię (name) i wiek (age) są zmienne i zależą od wprowadzonych wartości w chwili wykonania programu. Przy użyciu sformatowanego łańcucha znaków poprzednie wyrażenie można zapisać również jako:

print("%s is %d years old." % (aName, age))

Ten prosty przykład ilustruje nowe wyrażenie string. Symbol % użyty w stringu nazywany jest operatorem formatu. Lewa część wyrażenia zawiera szablon - sformatowany wygląd tekstu, a prawa zbiór wartości, które zostaną wstawione w tekst. Zauważ, że wielkość zbióru wartości po prawej jest taka sama jak ilość symboli % w szablonie po prawej. Wartości pobierane są w kolejności od lewej do prawej ze zbioru i wstawiane w sformatowany tekst.

Spójrzmy na składnię obu części powyższego wyrażenia w szczegółach. Format może zawierać jeden lub więcej specyfikatorów konwersji. Symbol ten informuje o typie zmiennej, która ma zostać wstawiona w dane miejsce tekstu. W przykładzie %s określa zmienną typu string, a %d zmienną liczbową. Inne możliwe typy to i ``, ``u ``, ``f ``, ``e ``, ``g ``, ``c lub %, które są opisane w Tabeli 9.

Tabela 9: Formatowanie Stringa przez Specyfikator Konwersji
Znak Format Wyjściowy
d, i Liczba całkowita ze znakiem
u Nieujemna liczba całkowita
f Liczba zmienno-przecinkowa w postaci m.ddddd
e Liczba zmienno-przecinkowa w postaci m.ddddde+/-xx
E Liczba zmienno-przecinkowa w postaci m.dddddE+/-xx
g Użyj %e dla wykładników menijszych od \(-4\) I większych od \(+5\), w przeciwnym wypadku użyj %f
c Pojedyńczy znak
s Łańcuch znaków (string) lub każdy obiekt, który może być przekształcony do tej postaci za pomocą funkcji str
% Wstaw znak procenta %

Dodatkowo do formatu znaku można dołączyć modyfikator pomiędzy znak % a symbol typu. Modyfikator ten posłużyć może do wyrównania zmiennej do lewej, do prawej wraz z określeniem szerokości pola i liczbę cyfr, które mają być wyświetlone po kropce. W Tabeli 10 wytłumaczone jest ich użycie.

Tabela 10: Dodatkowe opcje formatowania
Modyfikator Przykład Opis
number %20d Wstaw wartość w pole o szerokości 20
- %-20d Wstaw wartość w pole o szerokości 20 z wyrównaniem do lewej
+ %+20d Wstaw wartość w pole o szerokości 20 z wyrównaniem do prawej
0 %020d Wstaw wartość w pole o szerokości 20, uzupełnij liczbę zerami
. %20.2f Wstaw wartość w pole o szerokości 20 z dwiema cyframi po kropce
(name) %(name)d Wstaw wartość ze słownika powiązaną z kluczem name

Prawą stronę wyrażenia w łańcuchy sformatowanym stanowi zbiór wartości, które w trakcie wywołania zostają obliczone i wstawione w tekst. Zbiór ten jest krotką lub słownikiem. W przypadku krotki wartości umieszczane są kolejno zgodnie z pozycją tzn. pierwszy element krotki odpowiada pierwszemu znakowi w szablonie tekstu. Jeśli kolekcję stanowi słownik wartości wstawiane są zgodnie z powiązanymi do nich kluczami. Wymagane jest użycie modyfikatora (name) w celu sprecyzowania klucza.

>>> price = 24
>>> item = "banana"
>>> print("The %s costs %d cents"%(item,price))
The banana costs 24 cents
>>> print("The %+10s costs %5.2f cents"%(item,price))
The     banana costs 24.00 cents
>>> print("The %+10s costs %10.2f cents"%(item,price))
The     banana costs      24.00 cents
>>> itemdict = {"item":"banana","cost":24}
>>> print("The %(item)s costs %(cost)7.1f cents"%itemdict)
The banana costs    24.0 cents
>>>

Poza stringami sformatowanymi za pomocą symboli formatu i ich modyfikatorami Python pozwala na wykorzystanie metody format w połączeniu z nową klasą Formatter w celu implementacji zaawansowanego rodzaju formatowania. Więcej na temat tych funkcjonalności można znaleźć, dołączonej do Python bibliotece.

Następna część - Struktury kontrolne