import pandas as pd
import matplotlib.pyplot as plt
from math import pi
import numpy as np
import sys, os
Приложение 2
Пример использования функции def years():
def years():
for attemp in range(attemps)
try:
global year
year = input(f'Введите год (1998-2018), у вас {attemps - attemp} попыток: ')
if int(year)>=2019 or int(year)<=1997:
print('Данных по такому году нет, попробуйте снова.')
continue
except ValueError: #Если введено не число выводит ошибку
print(f'Некорректные данные!')
Приложение 3
Пример использования функции def years():
def mon():
for attemp in range(attemps):
try:
global month
month = input(f'Введите номер месяца, у вас {attemps - attemp} попыток: ')
if int(month) >= 13 or int(month) <= 0:
print('В году всего 12 месяцев, попробуйте снова.')
continue
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
Приложение 4
Пример использования функции def par():
def par():
for attemp in range(attemps):
all_parametr=['Ветер вечером','Ветер днём','Давление вечером','Давление днём','Температура вечером','Температура днём']
global parametr
parametr=input('Введите один из параметров погоды, представленных ниже: \n(Ветер вечером)\n(Ветер днём)\n(Давление вечером)\n(Давление днём)\n(Температура вечером)\n(Температура днём)\n>>> ')
for i in range(6):
if parametr.lower()==all_parametr[i].lower():
parametr=all_parametr[i]
check=True
break
else:
check=False
if check==True:
break
else:
print(f'Некорректные данные!У вас {attemps}')
if attemp == attemps - 1:
print("Выполнено %s неудачных попыток. Выход из программы!"%(attemps))
sys.exit()
Приложение 5
Пример использования функции def find():
def find():
global name
name="piter_%s_%s.csv"%(year, month)
for root, dirs, files in os.walk('C:\\Python37\\'):
if name in files:
global path
path=(os.path.join(root, name))
break
else:
path = ""
if path == "":
print("Данных не найдено")
func()
sys.exit()
Приложение 6
Пример использования функции def calc():
def calc():
global pogoda
pogoda="f['%s']"%parametr
global f
f = pd.read_csv(path, encoding='utf8')
if parametr[:5]!="Ветер":
constr()
else:
constr_wind()
Приложение 7
Пример использования функции def constr():
def constr():
try:
print('Среднее значение данного параметра в Санкт-Петербурге: ', sum(f(pogoda))/len(f(pogoda)))
except ZeroDivisionError:
print("Пустой файл!")
func()
sys.exit()
f(pogoda).plot()
plt.xlabel('день')
plt.ylabel('%s'%parametr.split()[0].lower)
plt.title('График. %s %s.%s в Ростове'%(parametr, month, year))
Приложение 8
Пример использования функции def constr_wind():
def constr_wind(): #Строит Розу Ветров
side=[]
v=[]
for i in range(len(eval(pogoda))):
eval(pogoda)[i]=eval(pogoda)[i].split()
try:
v.append(eval(pogoda)[i][1])
except IndexError:
v.append('0м/с')
side.append(eval(pogoda)[i][0])
for i in range(len(v)):
v[i]=int(v[i].rstrip('м/с'))
try:
print('Среднее значение данного параметра в Ростове: ', sum(v)/len(v))
except ZeroDivisionError:
print("Пустой файл!")
func()
sys.exit()
listside=['С','СВ','В','ЮВ','Ю','ЮЗ','З','СЗ']
r=[]
n=0
for elem in listside:
for i in range(0, len(side)):
if side[i]==elem:
n+=1
r.append(n/len(side))
n=0
lag = pi/4.
angles = np.arange(0, 2*pi, lag)
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111, projection='polar')
ax.plot(angles, r, color='r', linewidth=1.)
ax.plot((angles[-1],angles[0]),(r[-1],r[0]), color='r', linewidth=1.)
ax.set_theta_direction(-1)
ax.set_theta_offset(pi/2.0)
ax.set_title("Роза ветров. %s %s.%s в Ростове"%(parametr, month, year), loc='center')
plt.tight_layout()
Приложение 9
Пример использования функции def years():
def years():
for attemp in range(attemps):
try:
global year
year = input(f'Введите год (1998-2018), у вас {attemps - attemp} попыток: ')
if int(year)>=2019 or int(year)<=1997:
print('Данных по такому году нет, попробуйте снова.')
years()
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
def mon():
for attemp in range(attemps):
try:
global month
month = input(f'Введите номер месяца, у вас {attemps - attemp} попыток: ')
if int(month) >= 13 or int(month) <= 0:
print('В году всего 12 месяцев, попробуйте снова.')
mon()
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
Приложение 10
Пример использования функции def total():
def total():
if inf1<inf2:
print('В вашем городе %s в указанный период меньше'%parametr)
elif inf1>inf2:
print('В вашем городе %s в указанный период больше'%parametr)
else:
print('в городах %s в указанный период одинаково'%parametr)
Приложение 11
Пример использования функции def city_1():
Приложение 12
Пример использования функции def city_1():
def city_1():
global gorod1
for attemp in range(attemps):
gorod1=input('Ваш город: ')
for i in range(8):
if gorod1.lower()==vse_goroda[i].lower():
gorod1=vse_goroda[i]
check=True
break
else:
check=False
if check==True:
gorod1=[vse_goroda_lat[i] for i in range(8) if gorod1==vse_goroda[i]]
gorod1="".join(str(gorod1[0]))
break
else:
print('Некорректные данные!')
if attemp == attemps - 1:
print("Выполнено %s неудачных попыток. Выход из программы!"%(attemps))
sys.exit()
Приложение 13
Пример использования функции def calc():
def calc():
global pogoda1, pogoda2, f1,f2
pogoda1="f1['%s']"%parametr
pogoda2="f2['%s']"%parametr
f1 = pd.read_csv(path1, encoding='utf8')
f2 = pd.read_csv(path2, encoding='utf8')
if parametr[:5]!='Ветер':
constr()
else:
constr_wind()
Приложение 14
Пример работы функции def constr():
def constr():
global inf1, inf2
try:
print('Среднее значение данного параметра в вашем городе: ', sum(eval(pogoda1))/len(eval(pogoda1)))
except ZeroDivisionError:
print("%s Пустой файл! "%name1)
func()
sys.exit()
inf1=sum(eval(pogoda1))/len(eval(pogoda1))
try:
print('Среднее значение данного параметра в другом городе: ', sum(eval(pogoda2))/len(eval(pogoda2)))
except ZeroDivisionError:
print("%s Пустой файл!"%name2)
func()
sys.exit()
inf2=sum(eval(pogoda2))/len(eval(pogoda2))
Приложение 15
Пример использования функции def constr_wind():
def constr_wind():
global inf1, inf2
v1=[]
for i in range(len(eval(pogoda1))):
eval(pogoda1)[i]=eval(pogoda1)[i].split()
try:
v1.append(eval(pogoda1)[i][1])
except IndexError:
v1.append('0м/с')
for i in range(len(v1)):
v1[i]=int(v1[i].rstrip('м/с'))
try:
print('Среднее значение данного параметра в вашем городе: ', sum(v1)/len(v1))
except ZeroDivisionError:
print("%s Пустой файл!"%name1)
func()
sys.exit()
inf1=sum(v1)/len(v1)
v2=[]
for i in range(len(eval(pogoda2))):
eval(pogoda2)[i]=eval(pogoda2)[i].split()
try:
v2.append(eval(pogoda2)[i][1])
except IndexError:
v2.append('0м/с')
for i in range(len(v2)):
v2[i]=int(v2[i].rstrip('м/с'))
try:
print('Среднее значение данного параметра в другом городе: ', sum(v2)/len(v2))
except ZeroDivisionError:
print("%s Пустой файл!"%name2)
func()
sys.exit()
inf2=sum(v2)/len(v2)
Приложение 16
Пример использования функции def total():
def total():
if inf1<inf2:
print('В вашем городе %s в указанный период меньше'%parametr)
elif inf1>inf2:
print('В вашем городе %s в указанный период больше'%parametr)
else:
print('в городах %s в указанный период одинаково'%parametr)
Приложение 17
Скрипт Задания №1
#Подключаем библиотеки
import pandas as pd
import matplotlib.pyplot as plt
from math import pi
import numpy as np
import sys, os
import warnings
warnings.filterwarnings("ignore")# скрываем предупреждения
print('"ВЕТЕР ДНЁМ В КРАСНОДАРЕ"')
attemps = 5# количество попыток
#Проверка ввода для года
def years():
for attemp in range(attemps):
# проверка на принадлежность временному диапазону
try:
global year
year = input(f'Введите год (1998-2018), у вас {attemps - attemp} попыток: ')
if int(year)>=2019 or int(year)<=1997:
print('Данных по такому году нет, попробуйте снова.')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
continue
# проверка на числовое значение
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
#Проверка ввода для месяца
def mon():
for attemp in range(attemps):
# проверка на правильность ввода номера месяца
try:
global month
month = input(f'Введите номер месяца, у вас {attemps - attemp} попыток: ')
if int(month) >= 13 or int(month) <= 0:
print('В году всего 12 месяцев, попробуйте снова.')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
continue
# проверка на числовое значение
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
#Поиск файла и пути к нему
def find():
global name
name="krasnodar_%s_%s.csv"%(year, month)# генерация имени файла для заданных года и месяца
# поиск файла
for root, dirs, files in os.walk('C:\\'):
if name in files:
global path
path=(os.path.join(root, name))
break
else:
path=""
# проверка на существование файла с таким именем
if path=="":
print("Данных не найдено. Попробуте снова...")
func()
sys.exit()
#Вычисление средней скорости
def calc():
global parametr, v, side
parametr='Ветер вечером'
pogoda="f['%s']"%parametr
f = pd.read_csv(path, encoding='utf8')
# составление списков направлений и скорости ветра
side=[]
v=[]
for i in range(len(eval(pogoda))):
eval(pogoda)[i]=eval(pogoda)[i].split()
try:
v.append(eval(pogoda)[i][1])
except IndexError:
v.append('0м/с')
side.append(eval(pogoda)[i][0])
for i in range(len(v)):
v[i]=int(v[i].rstrip('м/с'))
# проверка на пустой файл
try:
print('Среднее значение данного параметра в Краснодаре: ', sum(v)/len(v))
except ZeroDivisionError:
print("Пустой файл!")
func()
sys.exit()
#Построение розы ветров
def constr():
# вычисление повторяемости направлений ветра
listside=['С','СВ','В','ЮВ','Ю','ЮЗ','З','СЗ']# список всех возможных направлений
r=[]
n=0
# создание списка частоты повторяемости направлений
for elem in listside:
for i in range(0, len(side)):
if side[i]==elem:
n+=1
r.append(n/len(side))
n=0
angles = np.arange(0, 2*pi, pi/4.)# задаем шкалу делений
fig = plt.figure(figsize=(10,5))# задаем размер полотна
ax = fig.add_subplot(111, projection='polar')# задаем график в полярных координатах
ax.plot(angles, r, color='r', linewidth=1.)# построение розы ветров
ax.plot((angles[-1],angles[0]),(r[-1],r[0]), color='r', linewidth=1.)# замыкаем розу ветров
ax.set_theta_direction(-1)# изменяем направление обхода на "по часовой"
ax.set_theta_offset(pi/2.0)# смещаем нулевую ось на 90 градусов против часовой стрелки, в положение "север"
ax.set_title("Роза ветров\n %s за %s.%s в Краснодаре"%(parametr, month, year), loc='center', color='b')# заголовок
ax.set_xlabel(u'Среднее значение: %.2f м/с'%(sum(v)/len(v)), fontsize=8, color='g')# вывод среднего значения скорости ветра
# настраиваем вспомогательную сетку
ax.grid(True, axis='y', color='gray', linestyle='--')
ax.grid(True, axis='x', color='gray', linestyle='--')
plt.tight_layout()# вывод графика
#Вызов всех функций
def func():
years()
mon()
find()
calc()
constr()
plt.show()
func()
Приложение 18
Скрипт Задания №2
#Подключаем библиотеки
import sys, os
import pandas as pd
import warnings
warnings.filterwarnings("ignore")# скрываем предупреждения
attemps=5# количество попыток
#Проверка ввода для года
def years():
for attemp in range(attemps):
# проверка на принадлежность временному диапазону
try:
global year
year = input(f'Введите год (1998-2018), у вас {attemps - attemp} попыток: ')
if int(year)>=2019 or int(year)<=1997:
print('Данных по такому году нет, попробуйте снова.')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
continue
# проверка на числовое значение
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
#Проверка ввода для месяца
def mon():
for attemp in range(attemps):
# проверка на правильность ввода номера месяца
try:
global month
month = input(f'Введите номер месяца, у вас {attemps - attemp} попыток: ')
if int(month) >= 13 or int(month) <= 0:
print('В году всего 12 месяцев, попробуйте снова.')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
continue
# проверка на числовое значение
except ValueError:
print(f'Некорректные данные!')
if attemp == attemps - 1:
print("Выход из программы!")
sys.exit()
else:
break
#Списки городов на латинском алфавите и кириллице соответственно
vse_goroda_lat=['kazan', 'krasnodar', 'moskva', 'piter', 'rostov', 'ufa', 'volgograd', 'voroneg']
vse_goroda=['Казань',"Краснодар","Москва","Питер","Ростов","Уфа","Волгоград","Воронеж"]
#Проверка ввода названия вашего города
def city_1():
global gorod1
for attemp in range(attemps):
gorod1=input('Ваш город: ')
# проверка на принадлежность списку
for i in range(8):
if gorod1.lower()==vse_goroda[i].lower():
gorod1=vse_goroda[i]
check=True
break
else:
check=False
# преобразование названия города для латинского алфавита
if check==True:
gorod1=[vse_goroda_lat[i] for i in range(8) if gorod1==vse_goroda[i]]
gorod1="".join(str(gorod1[0]))
break
else:
print('Некорректные данные!')
if attemp == attemps - 1:
print("Выполнено %s неудачных попыток. Выход из программы!"%(attemps))
sys.exit()
#Создание имени файла и пути к нему для первого города
def find_1():
global name1, path1
name1="%s_%s_%s.csv"%(gorod1, year, month)# генерация имени файла для заданных города, года и месяца
# поиск файла
for root, dirs, files in os.walk('E:\\'):
if name1 in files:
path1=(os.path.join(root, name1))
break
else:
path1=""
# проверка на существование файла с таким именем
if path1=="":
print("Данных для %s не найдено. Попробуйте снова..."%name1)
func()
sys.exit()
#Проверка ввода названия города для сравнения
def city_2():
global gorod2
for attemp in range(attemps):
gorod2=input('Город для сравнения: ')
# проверка на принадлежность списку
for i in range(8):
if gorod2.lower()==vse_goroda[i].lower():
gorod2=vse_goroda[i]
check=True
break
else:
check=False
# преобразование названия города для латинского алфавита
if check==True:
gorod2=[vse_goroda_lat[i] for i in range(8) if gorod2==vse_goroda[i]]
gorod2="".join(str(gorod2[0]))
break
else:
print('Некорректные данные!')
if attemp == attemps - 1:
print("Выполнено %s неудачных попыток. Выход из программы!"%(attemps))
sys.exit()
#Создание имени файла и пути к нему для второго города
def find_2():
global name2, path2
name2="%s_%s_%s.csv"%(gorod2, year, month)
# поиск файла
for root, dirs, files in os.walk('E:\\'):
if name2 in files:
path2=(os.path.join(root, name2))
break
else:
path2=""
# проверка на существование файла с таким именем
if path2=="":
print("Данных для %s не найдено. Попробуйте снова..."%name2)
func()
sys.exit()
#Список всех параметров
all_parametr=['Ветер вечером','Ветер днём','Давление вечером','Давление днём','Температура вечером','Температура днём']
#Проверка ввода параметра
def par():
for attemp in range(attemps):
global parametr
parametr=input('Введите один из параметров погоды (см. список выше): ')
# проверка на принадлежность списку
for i in range(6):
if parametr.lower()==all_parametr[i].lower():
parametr=all_parametr[i]
check=True
break
else:
check=False
if check==True:
break
else:
print('Некорректные данные!')
if attemp == attemps - 1:
print("Выполнено %s неудачных попыток. Выход из программы!"%(attemps))
sys.exit()
#Вызов нужной функции в зависимости от параметра
def option():
global pogoda1, pogoda2, f1,f2
pogoda1="f1['%s']"%parametr
pogoda2="f2['%s']"%parametr
f1 = pd.read_csv(path1, encoding='utf8')
f2 = pd.read_csv(path2, encoding='utf8')
if parametr[:5]!='Ветер':
calc()
else:
calc_wind()
#Вычисление среднего значения температуры или давления для каждого города
def calc():
global inf1, inf2# переменные со средним значением
# проверка на пустой файл
try:
print('Среднее значение данного параметра в вашем городе: ', sum(eval(pogoda1))/len(eval(pogoda1)))
except ZeroDivisionError:
print("%s Пустой файл! "%name1)
func()
sys.exit()
inf1=sum(eval(pogoda1))/len(eval(pogoda1))
# проверка на пустой файл
try:
print('Среднее значение данного параметра в другом городе: ', sum(eval(pogoda2))/len(eval(pogoda2)))
except ZeroDivisionError:
print("%s Пустой файл!"%name2)
func()
sys.exit()
inf2=sum(eval(pogoda2))/len(eval(pogoda2))
#Вычисление среднего значения скорости ветра для каждого города
def calc_wind():
global inf1, inf2# переменные со средним значением
v1=[]
for i in range(len(eval(pogoda1))):
eval(pogoda1)[i]=eval(pogoda1)[i].split()# разделение строки списка на направление и скорость
try:
v1.append(eval(pogoda1)[i][1])# создание списка скорости ветра для каждого дня месяца
except IndexError:
v1.append('0м/с')# если встречается значение "Ш" - штиль
for i in range(len(v1)):
v1[i]=int(v1[i].rstrip('м/с'))# оставляем только числовые значения
# проверка на пустой файл
try:
print('Среднее значение данного параметра в вашем городе: ', sum(v1)/len(v1))
except ZeroDivisionError:
print("%s Пустой файл!"%name1)
func()
sys.exit()
inf1=sum(v1)/len(v1)
v2=[]
for i in range(len(eval(pogoda2))):
eval(pogoda2)[i]=eval(pogoda2)[i].split()# разделение строки списка на направление и скорость
try:
v2.append(eval(pogoda2)[i][1])# создание списка скорости ветра для каждого дня месяца
except IndexError:
v2.append('0м/с')# если встречается значение "Ш" - штиль
for i in range(len(v2)):
v2[i]=int(v2[i].rstrip('м/с'))# оставляем только числовые значения
# проверка на пустой файл
try:
print('Среднее значение данного параметра в другом городе: ', sum(v2)/len(v2))
except ZeroDivisionError:
print("%s Пустой файл!"%name2)
func()
sys.exit()
inf2=sum(v2)/len(v2)
#Сравнение значений и вывод результата
def total():
if inf1<inf2:
print('В вашем городе %s в указанный период меньше'%parametr)
elif inf1>inf2:
print('В вашем городе %s в указанный период больше'%parametr)
else:
print('в городах %s в указанный период одинаково'%parametr)
#Вызов всех функций
def func():
years()
mon()
print("Данные есть для таких городов, как:")# подсказка для ввода городов
for i in range(8):
print('-', vse_goroda[i])
city_1()
find_1()
city_2()
find_2()
print('Параметры погоды:')# подсказка для ввода параметра погоды
for i in range(6):
print('-', all_parametr[i])
par()
option()
total()
func()