Michael.13.Tokarev (обс.emailвкладстат.глоб. инфо.журналыблокировки)


  • Изучил курс 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()