Єдина Країна!

Головне меню

Наша кнопка

Українські уроки про ІТ

Друзі

Підтримка української армії


Головна Програмування - Python Операції введення-виведення, робота з файлами Python

Операції введення-виведення, робота з файлами Python
Написав Invader   
Понеділок, 12 серпня 2013 12:54
Переглядів: 13216

Python ua: Операції введення-виведення

Вступ

В майбутньому можуть виникнути ситуації, коли твоя програма повинна буде взаємодіяти з користувачем. Наприклад, тобі знадобиться отримати якісь дані від користувача і щось вивести у відповідь. Цього можна досягти використавши функції input() і print() відповідно.

Для друку на екран можна також скористатися різноманітними методами класу str. Наприклад, можна використати функцію rjust для виведення рядку який вирівнюється по правому краю екрана.

Інший поширений тип операцій введення-виведення це робота з файлами. Здатність створювати, читати і записувати в файли неодмінна риса багатьох програм.

 

 

Обробка даних від користувача

Паліндром, перевертень, рак літеральний, паліндромон (від грец. πάλιν — «назад, знов» та грец. δρóμος — «біг») — слово, словосполучення або віршований рядок, що однаково читається в обох напрямках (зліва направо та справа наліво).

        #!/usr/bin/python
        # user_input.py

        def reverse(text):
            return text[::-1]
        
        def is_palindrome(text):
            return text == reverse(text)

        something = input('Введіть текст: ')

        if (is_palindrome(something)):
            print("Так, це паліндром")
        else:
            print("Ні, це не паліндром")


Вивід:

    
        $ python user_input.py
        Введіть текст: sir
        Ні, це не паліндром

        $ python user_input.py
        Введіть текст: madam
        Так, це паліндром
        
        $ python user_input.py
        Введіть текст: racecar
        Так, це паліндром
    

Як це працює:

Ми використали можливість створювати зрізи для того щоб змінити порядок слідування елементів в рядку на протилежний. Ми вже бачили як можна створювати зрізи послідовностей використовуючи код на зразок seq[a:b]. Крім початкової і кінецої позиції зрізу можна також передати функції 3-й параметр який вказує на крок (к-ть елементів які функція занесе до зрізу за один раз) з яким буде створено зріз. Типово, крок дорівнює одиниці. Саме тому функція повертає нерозривну, безперервну частину тексту. Якщо значення кроку від’ємне число, то зріз послідовністі буде починатися з кінця.

Функція input() приймає значення рядкового типу і виводить його на екран. Потім вона чекає поки користувач не натисне клавішу Enter. Як тільки користувач натиснув Enter, функція поверне в програму те що він ввів.

Домашня робота:

Перевірка на те чи слово є паліндромом повинна ігнорувати знаки пунктуації, пробіли, і регістр символів. Наприклад, "Rise to vote, sir." також паліндром, але програма так не вважає. Ти можеш вдосконалити програму так щоб вона розпізнала що це паліндром?

 

Файли

Для роботи з файлами потрібно створити об’єкт класу file і скористатися методами read, write, readline для читання або запису. Здатність читати файл або записувати в нього дані залежить від режиму який ти вказав при відритті файлу. Після завершення роботи з файлом слід викликати для нього метод close для того щоб вказати Python що ми його вже не використовуємо.

Приклад:

        #!/usr/bin/python
        # Filename: using_file.py

        poem = '''\
            Programming is fun
            When the work is done
            if you wanna make your work also fun:
            use Python!
        '''

        f = open('poem.txt', 'w') # 'w' вказує на те що файл відкрито для запису
        f.write(poem) # записати текст до файлу
        f.close() # закрити файл

        f = open('poem.txt') # якщо режим не вказано, припускається що файл відкрито тільки для читання
        
        while True:
            line = f.readline() # читає рядок по одному за раз
            if len(line) == 0: # Нульова довжина вказує на кінець файлу (EOF). Якщо так, то
                break # вийти з циклу
            print(line, end='')

        f.close() # Закрити файл. Код виконається, тоді коли програма вийде з циклу вище


Вивід:

    
        $ python using_file.py
        Programming is fun
        When the work is done
        if you wanna make your work also fun:
            use Python!
    

Як це працює:

Спершу ми відкрили файл скориставшись функцією open, Як можна бачити з коду 1-м аргументом для цієї функції слугує ім’я файлу, 2-й аргумент — тип доступу або режим. Існує декілька режимів — читання ('r'), запис ('w'), додавання('a'). Також, можна вказати з яким типом файлу ми маємо справу. Бінарний файл ('b') чи текстовий ('t'). Насправді існує більше режимів і ти можеш дізнатися про них прочитавши довідку — help(open). Типово, функція open вважає що файл відкрито для читання і він є текстовим (це якщо режим не вказано).

В цьому прикладі ми відкрили файл для запису в як текстовий і далі використали метод write об’єкту типу file для запису. В кінці закрили файловий дескриптор.

Далі файл було відкрито знову, але цього разу для читання. Тип доступу ми не вказали, бо режим 'r' — це типовий режим для функції. Ми прочитали кожен рядок файлу скориставшись методом readline в циклі. Цей метод повертає рядок включно з символом нового рядка в кінці. Коли метод повертає порожній рядок, можна вважати що кінець файлу досягнуто. В такому разі відбувається вихід з циклу (break).

Типово, функція print() автоматично виводить на екран також і символ нового рядку, Але, сокільки, рядки прочитані з файлу вже містять такий символ, ми вказали функції не додавати його до виводу передавши їй порожній рядок як 2-й аргумент — end=''. В кінці ми закрили файл.

Тепер перевір вміст файлу poem.txt для того щоб переконатися чи там справді є текст.

 

Pickle

Python постачається з спеціальним модулем який називається Pickle. Він дозволяє вам зберегти будь-який Python-об’єкт у файлі і потім, отримати його назад.

Приклад:

        #!/usr/bin/python
        # Filename: pickling.py

        import pickle
        # назва файлу в якому буде зберігатися об’єкт
        shoplistfile = 'shoplist.data'
        # список покупок
        shoplist = ['apple', 'mango', 'carrot']

        # Запис в файл
        f = open(shoplistfile, 'wb')
        pickle.dump(shoplist, f) # скинути об’єкт в файл
        f.close()
        del shoplist # знищити змінну shoplist

        # Прочитати з файлового сховища
        f = open(shoplistfile, 'rb')
        storedlist = pickle.load(f) # завантажити об’єкт з файлу
        print(storedlist)

Як це працює:

Для того щоб зберегти об’єкт в файл спершу його потрібно відкрити як бінарний для запису і потім, викликати функцію dump з модуля pickle.

Потім ми отримали збережений об’єкт назад скориставшись функцією load з модулю pickle.

 

Підсумок

Ми обговорили роботу з файлами, функцію open а також функцію input і те як можна працювати з данними введеними користувачем.

Далі ми поговоримо про концепцію винятків.


Автор перекладу - Дмитро Юрченко.


( 11 Проголосувало )
Коментарі
Добавити новий
Сергій  - Українські літери в программах.   |2014-09-26 03:36:26
Добрий день. Таке питання:
проста програма
для читання тексту з файлу, обробка й
виведення на екран.
В середовищі екліпс -
программа працює.
Коли запускаю в консолі win
- видаэ помилку : UnicodeEncodeError: 'charmap' codec can't encode
character 'u0456'
Якщо замынити літери "і" на 1 -
все працює. Як це побороти (кодванням, а не
замінною літери) ??
Адміністратор   |2014-10-05 07:18:07
avatar Ехх цей Windows..
Для нього можна застосувати
наступні виходи:
1. ігнорувати символи, що не
виводяться
import sys
mystr = 'і - символ'
print
mystr.encode(sys.stdout.encoding, "ignore"
2. заміняти їх
на знаки питання
import sys
mystr = 'і - символ'
print
mystr.encode(sys.stdout.encoding, "replace"

А саме краще,
це не використовувати консолі в
Windows.
Використовуйте Linux або читайте

http://programming.in.ua/other-files/other/263-al
ternative-console-windows.html
Адміністратор   |2014-10-08 18:38:43
avatar Також варіант з виведенням наших літер:
1.
виконати команду chcp 65001 в консолі
2. змінити
шрифт для консолі на такий, що
підтримуватиме юнікод (н-д, Lucida)
Марина  - паліндром   |2015-04-01 19:59:40
а можете підказати,як зробити те
завдання,щоб ігнорувало пропуски і коми?
Адміністратор   |2015-04-02 01:39:22
avatar Марина, треба витерти їх із стрічки перед
порівнянням
Є дві можливості
1. функцією
заміни replace (прийдеться викликати її 2 рази
для заміни пробілу і коми)
2. з допомогою
регулярних виразів (що в даному випадку
більш краще підходить)

Рішення, яке
видалить всі символи, крім
букв.
підключаємо бібліотеку import re
і у
функції def is_palindrome(text):
додаємо перший
рядок

text = re.sub('[^0-9a-zA-Z]+', '', text)
Ustym  - Як зробити щоб вивело рядок а не стовбець?   |2016-04-10 20:02:50
Як зробити щоб вивело рядок а не
стовбець?
import sys


x=int(sys.argv[1])
y=int(sys.argv[2])
z=int(
sys.argv[3])
print "Everybody sing a song:"
for i in range(0, y):

for j in range(0, x):
print "la-"
else:
print
"la "
if z==1:
print "!"
if z==0:
print "."
Залишити коментар
Ім`я:
e-mail:
 
Тема:
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Введіть цей настирливий код
Русская редакция: www.freedom-ru.net & www.joobb.ru

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Підписка

Хто онлайн?

Немає
На даний момент 16 гостей на сайті

Український рейтинг
TOP.TOPUA.NET