Применение компьютера¶
Алгоритм применения компьютера для решения физических задач
- Постановка задачи (математическая, геометрическая формулировка).
- 1.1. исходные данные 2.2. требуемый результат
- Выбор и обоснование метода решения
- 2.1. обзор возможных методов решения 2.2. выбор оптимального метода (критерии)
- Построение алгоритма
- 3.1. анализ задачи (разбиение на последовательно решаемые подзадачи с описанием входных и выходных данных) 3.2. блок схема 3.3. определение параметров, регулирующих выполнение программы (шаг сетки и т.п.) 3.4. планируемая эффективность (быстродействие), пути повышения эффективности 3.5. планируемая точность, пути повышения точности 3.6. предполагаемые случаи неправильной работы (недопустимые значения параметров или входных данных)
- Написание программы (реализация алгоритма)
- Тестирование (тестовые примеры) 2-3 примера
- 5.1. контрольные ответы 5.2. результат работы программы
Полезные кусочки кода¶
Таймер¶
Для контроля времени удобно использовать функцию time.clock()
из модуля time
.
- Простой пример (
запустить
) from time import clock beg = clock() for i in range(10000): a=1 print clock()-beg beg = clock()
- Простой пример (
Выполнение последних двух строк кода печатает время в секундах и перезапускает таймер.
- Пример посложнее (
запустить
) from time import clock class my_time(): def __init__(self): self.beg = clock() def __str__(self): st=str(clock()-self.beg) self.beg= clock() return st def __call__(self): t = clock()-self.beg self.beg += t return t timer=my_time() for i in range(10000): a=1 print timer print timer()
- Пример посложнее (
Все оформляем в виде класса у которого beg - внутренняя переменная. Таймер можно просто печатать или вызывать в виде функции.
Построение графиков¶
Построение графиков осуществляется при помощи функций plot()
из модуля pylab
.
Эта функция осуществляет размещение данных на графике. Показать график со всеми данными и передать
управление на его окно можно через вызов функции show()
из того же модуля.
Интерактивное построение графика (без передачи управления на его окно) происходить после
перехода в интерактивный режим (функция ion()
) и размещения данных (функция draw()
).
Простое посторение графика (
запустить
)from pylab import plot, show def func(x): return x*x a = 10 b = 20 n = 100 dx = 1.*(b-a)/n x = [a+i*dx for i in range(n+1)] y = [func(i) for i in x] plot(x,y,'ro',lw=2) show()
Обратите внимание на обязательные выделенные строки. Поменяйте пределы построения графика (a, b), число точек разбиения (n), функцию (fun). Посмотрите результат.
Интерактивное посторение графика (
запустить
)from pylab import ion,plot, draw def func(x): return x*x a = 10 b = 20 n = 100 dx = 1.*(b-a)/n x_set = [a+_*dx for _ in range(n+1)] ion() for x in x_set: plot(x,func(x),'go') draw()
Обратите внимание на обязательные выделенные строки. Ion() - переход в интерактивный режим. Каждая точка графика строится отдельно. Для вывода графика без передачи управления используется функция draw().
Запись и чтение текстового файла¶
Для доступа к данным файла создается файловый объект, который поддерживает операции чтения/записи строк.
- Простой пример записи (
запустить
) # -*- coding: cp1251 -*- f=open('data.txt','w') # Открываем файл для записи f.write('Header of the file \n') # Заголовок файла f.write('Info x y \n') f.write('text of start line\n') format_str = 'Data %f %f \n' # Строка формата '%f' - число с плав. точкой # '\n' - конец строки for x in range(50): # st = format_str % (x,x**3) # Подставляем данные в строку формата f.write(st) # Запись в файл f.write('text of end line\n') f.close() # Закрываем файл для записи
- Простой пример записи (
- Простой пример чтения с конвертированием данных (
запустить
) # -*- coding: cp1251 -*- f=open('data.txt','r') # открываем файл 'data.txt' для чтения line = 1 while line != '': # пока не достигнут конец файла line=f.readline() # читаем строки if line.find('start line') >= 0: # если нашли строку содержащую data=[] # 'start line' начинаем запись line = f.readline() while line.find('end line') < 0 or line =='': # пока не нашли строку содержащую 'end line' читаем и сохраняем data.append(line) line = f.readline() f.close() # закрываем файл - убираем ссылку info = [] for line in data: # обрабатываем строки # разделяем строку, пропускаем первое слово и меняем формат info.append([float(i) for i in line.split()[1:]]) print info
- Простой пример чтения с конвертированием данных (
Профайлинг¶
У Python есть профайлер, который называется cProfile. Он не только дает полное время выполнения, но также выдает время, затраченное на каждую функцию и количество вызовов функций. Результаты работы профайлера не требуют комментариев.
Можно импортировать его внутри кода или запустить его из интерпретатора:
import cProfile
cProfile.run('foo()')
Возможно более полезно использовать профайлер при запуске кода:
python -m cProfile [-o output_file] [-s sort_order] myscript.py
-o пишет результаты в файл вместо стандартного вывода
-s определяет один из sort_stats() условия для сортировки вывода. Это работает, когда -o не используется.
Можно создать новый испольняемый файл - команду „profile.bat“:
python -m cProfile %1
и запускать файлы питона через нее:
profile euler048.py