Форум сайта python.su
0
Напишите программу, которая уменьшает размер программ, написанных на Питоне (без использования некоторых возможностей языка).
Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится, но в изменённом виде:
если следуют несколько пробелов подряд не в начале строки, то нужно оставить только один пробел;
если встретился символ комментария #, то его и всё, что за ним, выводить не нужно;
если лишние пробелы или символ комментария встретились внутри (одинарных) кавычек, то ничего убирать или менять в них не надо;
если после кавычки встретилась ещё одна кавычка, то она закрывает первую лишь в том случае, если перед ней не стоит обратный слэш, не экранированный другим обратным слэшем (гарантируется, что за пределами кавычек и комментариев обратный слэш не встречается).
Если ввод и вывод программы осуществляется через одну и ту же консоль, ввод и вывод будет перемешан; это не помешает разделению ввода и вывода при автоматической проверке, поэтому беспокоиться об этом не нужно.
Формат ввода
На первой строке вводится количество строк в программе.
Далее — сама программа.
Формат вывода
Программа, сокращённая по описанным в условии правилам.
Пример 1
Ввод
1
print ('Привет')#поздороваемся
Вывод
print ('Привет')
Пример 2
Ввод
6
easy = 2 + 2
if easy == 4:# А вдруг нет?
print('Квадрат с обрезанными углами:')
print('/-\\')
print('|#|')
print('\\_/')
easy = 2 + 2
if easy == 4:
print('Квадрат с обрезанными углами:')
print('/-\\')
print('|#|')
print('\\_/')
Офлайн
294
ArtemDav гдето я такое уже видел, но там топикстартер вообще нес какуюто ахинею про быков и коров.
http://python.su/forum/topic/36288/?page=1#post-197244
это что задание на какихто курсах?
давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”. Вы можете это реализовать?
и что значит “(без использования некоторых возможностей языка)” какие конкретно возможности языка нельзя использовать?
[code python][/code]
Отредактировано PEHDOM (Янв. 3, 2019 21:17:29)
Офлайн
0
PEHDOMЕсли я создал тему с этой задачей, наверное я не могу это реализовать….Нельзя использовать библиотеки и методы (def)
ArtemDav гдето я такое уже видел, но там топикстартер вообще нес какуюто ахинею про быков и коров.http://python.su/forum/topic/36288/?page=1#post-197244это что задание на какихто курсах?давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”. Вы можете это реализовать? и что значит “(без использования некоторых возможностей языка)” какие конкретно возможности языка нельзя использовать?
Офлайн
27
ArtemDav, экий Вы, батенька, лентяй. Даже вот это не хотите сделать:
PEHDOMНеужели так трудно посмотреть в учебнике как открывается файл и как читаются строки из файла, как выводятся в файл строки? Неужели так сложно самому попробовать это набросать в виде скриптика? Обработка строк типа обрезки по позиции символа # или убрать лишние пробелы из строки - неужели это Вам не по силам? Другие условия сокращения тоже не такие уж сложные, как кажутся на первый взгляд.
давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”
Офлайн
294
ArtemDavЕсли ктото напишет задачу за вас, то вы так и не сможете это реализовать, вы можете определиться что вам по силам, а что вы не знаете как делать? Я вам предлагаю начать с простого:
Если я создал тему с этой задачей, наверное я не могу это реализовать
[code python][/code]
Отредактировано PEHDOM (Янв. 4, 2019 13:18:09)
Офлайн
0
PEHDOMя смог сделать обрезку до #, и убрать все пробелы, но мне надо оставлять 1, не знаю как это сделать, с остальным проблем нет
Офлайн
294
ArtemDavотлично, если вкратце то вам нужно посимвольно перебирать и смотреть на предыдущий символ, если это начало строки или если это в кавычках то оставляем как есть, а если предыдущий пробле то обрезаем его.
я смог сделать обрезку до #, и убрать все пробелы, но мне надо оставлять 1, не знаю как это сделать, с остальным проблем нет
# st = " easy = 'Этот текст должен остаться ' + 'неизменным !! ! !!!'" # какаято строка которую нужно обработать prev_sym = None # предыдущий символ, если его нет то это начало строки quotes_open = False # флаг открытия кавычки res = [] # результирующий список for char in st: # перебираем посимвольно строку if char == ' ': # если встретили пробел if prev_sym == None: # если предыдущего символа не было то это начало строки, пробелы не сокращаем res.append(char) elif prev_sym == ' ': # если предыдущий символ пробел if quotes_open: # и если открыты кавычки, пробелы не сокращаем res.append(char) else: # это не начало строки и не строковая паеременная, нам не нужен еще один пробел continue # в принципе continue не обязателен, можно вообще убрать весь блок else: но тогда не будет явным всесь алгоритм. else: # если предыдущий символ не пробел, и это не начало строки, то нужно этот пробле вписать prev_sym = char res.append(char) elif char == "'": # если нам попалась кавычка res.append(char) # мы пока не учитываем кавычку внутри кавычки экранированую обратным слешем, это уже следующий этап prev_sym = char quotes_open = not quotes_open # устанавливаем флаг открытия кавычки в True/False else: # если это не пробел и не кавычки то пихаем как есть res.append(char) prev_sym = char print('Исходная строка :', st, sep = '') print('Минифицированя строка:', ''.join(res), sep = '') >>> Исходная строка : easy = 'Этот текст должен остаться ' + 'неизменным !! ! !!!' Минифицированя строка: easy = 'Этот текст должен остаться ' + 'неизменным !! ! !!!' >>>
[code python][/code]
Офлайн
0
PEHDOMПрошу помочь, я все сделал, но вылетает на 5 тесте,
7 for i in range(1, 20): # 'цик'л print( i ) #c кучей 'коммент\'ариев' print(' # ') if True: print(' \', \' ' ) print('\t' )# это, кстати, символ табуляции print('\\' )
for i in range(1, 20) print( i ) print(' # ') if True: print(' \', \' ' ) print('\t' ) print('\\' ) # Не хватает : в цикле
for _ in range(int(input())): st = input() count = 0 slovo = "" prev_sym = None quotes_open = False res = [] for char in st: if char == ' ': if prev_sym is None: res.append(char) elif prev_sym == ' ': if quotes_open: res.append(char) else: continue else: prev_sym = char res.append(char) elif char == "'": res.append(char) prev_sym = char quotes_open = not quotes_open else: res.append(char) prev_sym = char for i in res: slovo = slovo + i k1 = False for i in range(len(slovo)): if ")" in slovo: if not k1: if slovo[i] != ")": count += 1 else: break else: if slovo[i] != "#": count += 1 else: count -= 1 break if not k1: print(slovo[:count + 1]) else: print(slovo[:count])
Офлайн
294
Если совсем вкратце то потому что
if slovo[i] != ")": count += 1 else: break
slovo[:count + 1]
for i in range(len(slovo)): if ")" in slovo:
# for _ in range(int(input())): st = input() count = 0 slovo = "" prev_sym = None quotes_open = False res = [] for char in st: if char == ' ': if prev_sym is None: res.append(char) elif prev_sym == ' ': if quotes_open: res.append(char) else: continue else: prev_sym = char res.append(char) elif char == "'": res.append(char) prev_sym = char quotes_open = not quotes_open elif char == '#': # если встретили символ коментария if not quotes_open: # и он не в кавычках break # дальше строку мы не обрабатываем else: # иначе он в кавычках и его нужно оставить res.append(char) prev_sym = char else: res.append(char) prev_sym = char #for i in res: # так делать нельзя, если нужно превратить список в строку используйте метод строк join() # slovo = slovo + i slovo = ''.join(res) print(slovo) >>> for i in range(1, 20): print( i ) print(' # ') if True: print(' \', \' ' ) print('\t' ) print('\\' ) >>>
[code python][/code]
Офлайн
0
PEHDOMhttps://imgur.com/a/rMCO0NP - Чекните
Если совсем вкратце то потому что
Офлайн