Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 3, 2019 15:40:23

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

Напишите программу, которая уменьшает размер программ, написанных на Питоне (без использования некоторых возможностей языка).

Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится, но в изменённом виде:

если следуют несколько пробелов подряд не в начале строки, то нужно оставить только один пробел;
если встретился символ комментария #, то его и всё, что за ним, выводить не нужно;
если лишние пробелы или символ комментария встретились внутри (одинарных) кавычек, то ничего убирать или менять в них не надо;
если после кавычки встретилась ещё одна кавычка, то она закрывает первую лишь в том случае, если перед ней не стоит обратный слэш, не экранированный другим обратным слэшем (гарантируется, что за пределами кавычек и комментариев обратный слэш не встречается).
Если ввод и вывод программы осуществляется через одну и ту же консоль, ввод и вывод будет перемешан; это не помешает разделению ввода и вывода при автоматической проверке, поэтому беспокоиться об этом не нужно.

Формат ввода
На первой строке вводится количество строк в программе.
Далее — сама программа.

Формат вывода
Программа, сокращённая по описанным в условии правилам.

Пример 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('\\_/')

Офлайн

#2 Янв. 3, 2019 21:16:13

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

ArtemDav гдето я такое уже видел, но там топикстартер вообще нес какуюто ахинею про быков и коров.
http://python.su/forum/topic/36288/?page=1#post-197244
это что задание на какихто курсах?
давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”. Вы можете это реализовать?

и что значит “(без использования некоторых возможностей языка)” какие конкретно возможности языка нельзя использовать?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 3, 2019 21:17:29)

Офлайн

#3 Янв. 4, 2019 12:28:47

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

PEHDOM
ArtemDav гдето я такое уже видел, но там топикстартер вообще нес какуюто ахинею про быков и коров.http://python.su/forum/topic/36288/?page=1#post-197244это что задание на какихто курсах?давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”. Вы можете это реализовать? и что значит “(без использования некоторых возможностей языка)” какие конкретно возможности языка нельзя использовать?
Если я создал тему с этой задачей, наверное я не могу это реализовать….Нельзя использовать библиотеки и методы (def)

Офлайн

#4 Янв. 4, 2019 12:55:49

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

ArtemDav, экий Вы, батенька, лентяй. Даже вот это не хотите сделать:

PEHDOM
давайте начнем с простого: “Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”
Неужели так трудно посмотреть в учебнике как открывается файл и как читаются строки из файла, как выводятся в файл строки? Неужели так сложно самому попробовать это набросать в виде скриптика? Обработка строк типа обрезки по позиции символа # или убрать лишние пробелы из строки - неужели это Вам не по силам? Другие условия сокращения тоже не такие уж сложные, как кажутся на первый взгляд.

Офлайн

#5 Янв. 4, 2019 13:14:25

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

ArtemDav
Если я создал тему с этой задачей, наверное я не могу это реализовать
Если ктото напишет задачу за вас, то вы так и не сможете это реализовать, вы можете определиться что вам по силам, а что вы не знаете как делать? Я вам предлагаю начать с простого:
“Программа считывает количество строк, затем — сами эти строки по очереди. Каждая строка выводится”
вы можете это реализовать? Там простейший же инпут в цикле и в том же цикле принт. если вы не можете даже это реализовать, может вам пока рано решать такие задачи, может стоит вернуться и подучить матчасть?.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 4, 2019 13:18:09)

Офлайн

#6 Янв. 4, 2019 17:30:27

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

PEHDOM
я смог сделать обрезку до #, и убрать все пробелы, но мне надо оставлять 1, не знаю как это сделать, с остальным проблем нет

Офлайн

#7 Янв. 4, 2019 22:24:47

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

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]
Бериегите свое и чужое время.

Офлайн

#8 Янв. 5, 2019 15:32:49

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

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])

Офлайн

#9 Янв. 5, 2019 17:12:01

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

Если совсем вкратце то потому что

                 if slovo[i] != ")":  
                    count += 1      
                else: 
                    break
Оно доходит до первой!!!! SIC!!!!! закрывающей скобки и прерывает цикл, тоесть счетчик остаеться на позиции перед закрывающей скобкой, а потом вы выводите
 slovo[:count + 1] 
Тоесть захватываете закрывающую скобку, но двоеточие уже не попадает в срез. А если скобок будет несколько? например for _ in range(int(input())): обрежет вообще до for _ in range(int(input()

Я честно говоря, не понимаю что вы делаете?
За что отвечает переменная k1?
А вот это:
     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]
Бериегите свое и чужое время.

Офлайн

#10 Янв. 5, 2019 19:29:50

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите срочно!!!1

PEHDOM
Если совсем вкратце то потому что
https://imgur.com/a/rMCO0NP - Чекните
Как убрать проверку пробелов в скобках?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version