Michael.13.Tokarev
Присоединился 2 июня 2010
Michael.13.Tokarev (обс. • email • вклад • стат. • глоб. инфо. • журналы • блокировки)
Python 2.6
править- Изучил курс Python, в том числе Tkinter.
- Выражаю благодарность автору курса за собранный в единый курс и переведенный с английского языка материал, а также ссылки на иные статьи для полее подробного ознакомления с выбранной частью статьи.
- Качество материала достаточно высокое, грубых ошибок мало. Мелкие ошибки, неточности и неполные части программ или отсутствие примеров (в том числе отсутствие примера как вызывать модуль) заставляют лучше разобраться в материале и немного поэкспериментировать.
- Неплохо было бы почистить статью - сделать ее более наглядной. К примеру когда в уроке требуется освоить использование встроенного модуля, лучше в начале статьи указать, что ко всем выбранным примерам программ надо приписать пару строк вроде
from Tkinter import *
root = Tk()
а в конце дописать
root.mainloop()
а не к каждой программе приписывать эти строчки. и обязательно 1 пример, как все это должно выглядеть.
- Другой вариант - к каждой программе дописать полный список всех импортируемых модулей. Пока что во многих программах этих строчек нет.
- Неясно, как запускать isympy. В консоли, как? isympy загружается отдельно от стандартных модулей или он встроен?
- В одном месте курса я заметил отсутствие необходимой части кода, а в следующем уроке он уже был. Признаться, я долго мучался, пытаясь найти ошибку, вока не перешел к следующему уроку. Хотелось бы, чтобы таких неприятностей не было вообще. В общем, более последовательное изложение материала было бы очень приятно видеть.
- Возможно, я буду выкладывать в "Уточнения" все замеченные мной неточности и отсутствие частей кода.
Уточнения
править- 12.5 Вложенные словари.
- Проблема - представлены неверные значения на выходе.
- Решение - ниже указаны верные значения.
Mean value of property A = 10.1667
Mean value of property B = 0.0344
Mean value of property C = 2015
Mean value of property D = 102.133
- 12.6 Сравнение стоимости акций.
- Проблема 1: Отсутствие компании Sun на сайте.
- Решение 1: Компания Sun прекратила свое существование и вошла в состав компании Oracle. Именно Oracle нужно искать. И в тексте программы изменить Sun на Oracle соответственно. Кроме того, файл данных с сайта для компании Oracle должен сохраняться не как stockprices_Sun.csv, а как stockprices_Oracle.csv.
- Проблема 2: Компания Oracle существует не с января 1988, а с марта 1988 года.
- Решение 2: Нужно указать этот факт по аналогии с указанным в статье примером:
# для Oracle мы должны начать с марта 1988:
mar88 = dates['MS'].index('1988-03')
x['Oracle'] = range(mar88, mar88 + len(prices['Oracle']), 1)
Тогда вся программа будет выглядеть следующим образом:
# -*- coding: cp1251 -*-
def read_file(filename):
infile = open(filename, 'r')
infile.readline() # читаем заголовки столбцов
dates = []; prices = []
for line in infile:
columns = line.split(',') # разделяем по запятой
date = columns[0]
date = date[:-3] # пропускаем день месяца (три последних цифры)
price = columns[-1] # нам нужен только последний столбец
dates.append(date)
prices.append(float(price)) # не забываем конвертировать
infile.close()
dates.reverse() # возвращаем порядок: от более старых к новым
prices.reverse() # и соответственно цены
return dates, prices
dates = {}; prices = {}
d, p = read_file('stockprices_Oracle.csv')
dates['Oracle'] = d; prices['Oracle'] = p
d, p = read_file('stockprices_Microsoft.csv')
dates['MS'] = d; prices['MS'] = p
d, p = read_file('stockprices_Google.csv')
dates['Google'] = d; prices['Google'] = p
data = {'prices': prices, 'dates': dates}
# нормировка цен:
norm_price = prices['Oracle'][0]
prices['Oracle'] = [p/norm_price for p in prices['Oracle']]
norm_price = prices['MS'][0]
prices['MS'] = [p/norm_price for p in prices['MS']]
jan05_MS = prices['MS'][dates['MS'].index('2005-01')]
jan05_Oracle = prices['Oracle'][dates['Oracle'].index('2005-01')]
norm_price = prices['Google'][0]/max(jan05_MS, jan05_Oracle)
prices['Google'] = [p/norm_price for p in prices['Google']]
# обозначаем "x" точки для построения графиков
x = {}
x['MS'] = range(len(prices['MS']))
# для Oracle мы должны начать с марта 1988:
mar88 = dates['MS'].index('1988-03')
x['Oracle'] = range(mar88, mar88 + len(prices['Oracle']), 1)
# для Google мы должны начать с января 2005:
jan05 = dates['MS'].index('2005-01')
x['Google'] = range(jan05, jan05 + len(prices['Google']), 1)
import matplotlib.pyplot as plt
plt.plot(x['MS'], prices['MS'], 'g-')
plt.plot(x['Oracle'], prices['Oracle'], 'y-')
plt.plot(x['Google'], prices['Google'], 'r-')
plt.legend(['Microsoft', 'Oracle', 'Google'], loc=0)
plt.grid()
plt.show()