Skip to content

Instantly share code, notes, and snippets.

@Leva-kleva
Last active April 21, 2018 21:52
Show Gist options
  • Save Leva-kleva/ea9abb43bfa830c77780dbf0f924f28c to your computer and use it in GitHub Desktop.
Save Leva-kleva/ea9abb43bfa830c77780dbf0f924f28c to your computer and use it in GitHub Desktop.
python_mehmat_msu
## file one
## 1.23
'''
в отличие от 25 и 26 задач тут уже идет обработка дичи на вводе
все "числа" которые питон не может обработать (если большое число или строка)
мы игнорируем, то есть строка "1 2 3 апы 1е10000 4 2" эквивалента строке "1 2 3 4 2"
'''
f = input() #с консоли вводится имя файла с данными, записаными в строку через ?робел
file_inp = open(f, "r")
file_out = open("output.txt", "w")
c1, c2, c3, b = map(float, input().split()) #коэффициенты, вводим из консоли
line = file_inp.readline() #считываем строку файла, так как по условию вся посл-ть в одной строке
line = line.split() # разбиение по пробелам
stek = [] #стек для хранения последних двух введенных чисел
flg = -1
for el in line : #проходим по "числам"
try : #если строка не число, бросаем исключение.
flg = max(0, flg) #обновление флага здесь для того чтобы фиксить что файл пустой
el = float(el)
if str(el) == "inf" or str(el) == "-inf" : #если большое число-- грустим и не обрабатываем его
print("number is very very big. I'm sorry :(")
else: #иначе это число, работем с ним
if len(stek) < 2 : #если в стеке мало чисел то дополняем его
stek.append(el)
else : #иначе проверяем условие
if abs(c1*stek[0] + c2*stek[1] + c3*el - b) > 0.00001 :
flg = 1 #если хотя бы раз условие не выполняется то флаг 1 и здесь заканчиваем цикл
break
stek[0], stek[1] = stek[1], el
except ValueError :
print("type is not float")
if flg == -1 :
print("file input is empty") #файл пуст
file_out.write("file input is empty")
elif flg == 1 :
file_out.write("NO")# не удовл условиям
else :
file_out.write("YES")# удовл условиям
file_inp.close()
file_out.close()
## file one
## nomber 1.25
'''
в этой задаче ответ от 0 (в случе пустой строки) до 5. Смотреть комментарий к 1-1.26
'''
f = input() #с консоли вводится имя файла с данными, записаными в строку через ?робел
file_inp = open(f, "r")
file_out = open("output.txt", "w")
line = file_inp.readline() #считываем строку файла, так как по условию вся посл-ть в одной строке
line = line.split() # разбиение по пробелам
mas = set() #множество чисел которые встретились
for el in line :
if len(el) > 0 : #если строка не пустая то добавляем элемент в множество
el = int(el) #инт так как все числа 1 2 3 4 или 5
mas.add(el)
file_out.write(str(len(mas))) #длина множества -- есть кол-во различных чисел
file_inp.close()
file_out.close()
## file one
## nomber 1.26
'''
по условию все члены последовательности состоят ИЛИ из числа a1 или a2 и тд
поэтому в случае пустой строки -- ответ 0
если строка не пустая, значит все элементы равны одному и тому же числу => ответ 1
других вариантов нет
'''
f = input() #с консоли вводится имя файла с данными, записаными в строку через ?робел
file_inp = open(f, "r")
file_out = open("output.txt", "w")
line = file_inp.readline() #читаем строку (как я понял вся последовательность в одной строке)
line = line.split()
if len(line) == 0 : #если файл пустой
file_out.write("0") # в файл пишем ответ ноль
else :
file_out.write("1")
file_inp.close()
file_out.close()
## не нужна
## file one
## nomber 6.6
file_in = open("input.txt", "r")
file_out = open("output.txt", "w")
n = file_in.readline() #читываем первую строку файла
mas = []
try: #пытаемся сделать первую строку целым (натуральным числом)
n = int(n)
except ValueError: #в случае невозможности бросаем исключение: пустой файл или число не инт
print("number is not integer or empty file")
exit() #на выходе получаем пустой файл
if n <= 0 : #на случай если ввели отрицательное целое число
print("number is not integer or empty file")
exit() #на выходе получаем пустой файл
for i in range(2, round(n**(1/2) + 2)) : #тривиальный алгоритм разложения
while n % i == 0 :
n //= i
file_out.write(str(i) + " ")
if i > n :
break
if n == 1 and mas != []: #если число изменялось в ходе цикла и при этом стало единицей -- значит мы получили разложение
exit
else : #иначе запписываем само число
file_out.write(str(n))
file_out.close()
file_in.close()
## file two
## nomber 3.4
def split(s) : #возвращает массив строк, разделенных символами из coll
mas = []
k = ''
for el in s :
if el in coll :
if k != '' :
mas.append(k)
k = ''
else :
k += el
if k != '' :
mas.append(k)
k = ''
return mas
file_in = open("input.txt", "r")
file_out = open("output.txt", "w")
word = input().lower() #читаем с консоли слово и переводим в нижний регистр
coll = list(input()) #читаем с консоли набор символов для разбиения
cnt_str = 1 #счетчик строк
for line in file_in :
line = line.lower()
if line[len(line)-1] == '\n' : #убираем неприятный символ перевода строки в конце каждой строки если есть
line = line[:-1]
line = split(line)
cnt_clm = 1 #счетчик позиции в строке. Нумерация с единицы.
for el in line :
if word == el : #если искомое слово равно слову из файла то выводим координаты
file_out.write(str(cnt_str) + " " + str(cnt_clm) + "\n")
cnt_clm += 1
cnt_str += 1
file_out.close()
file_in.close()
## file two
## nomber 3.5
from math import inf #ьаксимальное число импортируем
def split(s) : #возвращает массив строк, разделенных символами из coll
mas = []
k = ''
for el in s :
if el in coll :
if k != '' :
mas.append(k)
k = ''
else :
k += el
if k != '' :
mas.append(k)
k = ''
return mas
file_in = open("input.txt", "r")
file_out = open("output.txt", "w")
coll = list(input())
symb = dict() # словарь, ключ -- символ, значение по ключу-- кол-во раз встречи символа
min_len, max_len, sum_len = inf, 0, 0 # переменные для минимальной длины, максимальной, суммарной(сумма длин всех слов
sum_symb, sum_word = 0, 0 #кол-во всех символов, слов. Пробел за символ не считаем
for line in file_in :
line = line.lower() #преобразование строки к нижнему регистру
if line[len(line)-1] == '\n' : #убираем неприятный символ перевода строки в конце каждой строки если есть
line = line[:-1]
line = split(line)
for el in line : #идем по словам строки
min_len = min(min_len, len(el))
max_len = max(max_len, len(el))
sum_len += len(el)
sum_word += 1
for s in el : # идем по символам кождого слова
if symb.get(s) is None : # проверка есть ли в словаре ключ s
symb[s] = 1 #если нет, создаем
else :
symb[s] += 1
sum_symb += 1
file_out.write("minimum len:" + str(min_len) + "\n") ## вывод минимальной, максимальной, средней длины слов. последнее с точностью до трех знаков
file_out.write("maximum len:" + str(max_len) + "\n")
file_out.write("averge len:" + str(round(sum_len/sum_word, 3)) + "\n")
key_symb = list(symb.keys()) #берем ключи словаря
key_symb.sort() #сортируем их для алфавитного порядка
for k in key_symb : #пишем в файл символ+пробел+процент встречи с точностью до трех знаков+символ процента+перевод строки
file_out.write(str(k) + " " + str(round(symb[k]/sum_symb * 100, 3)) + "%\n")
file_out.close()
file_in.close()
## file two
## nomber 3.6
def split(s) : #возвращает массив строк, разделенных символами из coll
mas = []
k = ''
for el in s :
if el in coll :
if k != '' :
mas.append(k)
k = ''
else :
k += el
if k != '' :
mas.append(k)
k = ''
return mas
file_in = open("input.txt", "r")
file_out = open("output.txt", "w")
coll = list(input()) #читаем с консоли набор символов для разбиения
words = set() #множество слов
for line in file_in : #читаем файл по строкам
line = line.lower() #перевод всех символов в нижний регистр
if line[len(line)-1] == '\n' : #убираем неприятный символ перевода строки в конце каждой строки если есть
line = line[:-1]
line = split(line)
for el in line :
words.add(el) #добавляем слова в множество
words = list(words) #делаем множество списком
words.sort() #выполняем сортировку
for word in words : #пишем в файл
file_out.write(word + "\n")
file_out.close()
file_in.close()
##file two
## nomber 4.2.2
import os
folder = input() #считываем из консоли путь
obj = os.walk(folder)
files = [] #массив файлов, могут быть повторы файлов, типа в разных папках файлы с одинаковым названием
for el in obj : #сохраняем список файлов
files += el[2]
file_out = open("output.txt", "w")
for el in files : #печатаем в выходной файл. имя файла + длина с отступом таб от имени
file_out.write(el + " " + "\t" + str(len(el)) + "\n")
file_out.close()
## file two
## nomber 4.2.3
import os
folder_one = input() #считываем с консоли пути первой и второй папки пример С:\kek\dota
folder_two = input() #если смотрим файлы там же, где ле6ит и код, то пишем точку
obj_one = os.walk(folder_one) # почитать здесь https://pythoner.name/walk
obj_two = os.walk(folder_two)
file_one = set() #множества хранящие список файлов в каждой папке
file_two = set()
for el in obj_one : #данным циклом закидываем в первое множество файлы из первого каталога
for f in el[2] :
file_one.add(f)
break
for el in obj_two : #налогично получаем список файлов второго
for f in el[2] :
file_two.add(f)
break
file = list(file_one.intersection(file_two)) #пересечение множеств имен файлов и переделование в типа список для сортировки
file.sort() #сортировка для красоты
file_out = open("output.txt", "w")
for el in file : #печатаем в выходной файл
file_out.write(el + "\n")
file_out.close()
## file two
## nomber 4.2.4
import os
folder_one = input() #считываем с консоли пути первой и второй папки пример С:\kek\dota
folder_two = input() #если смотрим файлы там же, где ле6ит и код, то пишем точку
obj_one = os.walk(folder_one) # почитать здесь https://pythoner.name/walk
obj_two = os.walk(folder_two)
file_one = set() #множества хранящие список файлов в каждой папке
file_two = set()
for el in obj_one : #данным циклом закидываем в первое множество файлы из первого каталога
for f in el[2] :
file_one.add(f)
break
for el in obj_two : #налогично получаем список файлов второго
for f in el[2] :
file_two.add(f)
break
inter = file_one.intersection(file_two) #пересечение
file_1 = list(file_one - inter) #вычитание из первого множества пересечение множеств имен файлов и переделование в типа список для сортировки
file_1.sort() #сортировка для красоты
file_out_1 = open("output_1.txt", "w") #первый выходной файл. Здесь список файлов
#присутствующих в первом и отстутствущих во втором
#если А множесвто файлов из первого В из второго
#то здесь вывожу А-(A&B) то есть из множества А убираю пересечение множеств А и В,
#тем самым получаю список файлов присутствующих в А и отсутствующих в В
#если я не то сделал, не так понял задания, то сообщи мне об этом
for el in file_1 : #печатаем в выходной файл
file_out_1.write(el + "\n")
file_2 = list(file_two - inter)
file_2.sort()
file_out_2 = open("output_2.txt", "w")
for el in file_2 : #вывод во второй файл. Здесь B-(A&B)
file_out_2.write(el + "\n")
file_out_1.close()
file_out_2.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment