Last active
April 21, 2018 21:52
-
-
Save Leva-kleva/ea9abb43bfa830c77780dbf0f924f28c to your computer and use it in GitHub Desktop.
python_mehmat_msu
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## не нужна | |
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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