Как поставить скобки в питоне
Перейти к содержимому

Как поставить скобки в питоне

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как ставить автоматически двойные скобки () и кавычки «»

#1 Фев. 15, 2017 07:44:21

prevosxodstvo Зарегистрирован: 2017-02-08 Сообщения: 5 Репутация: 0 Профиль Отправить e-mail

Как ставить автоматически двойные скобки () и кавычки «»

Доброго всем дня! Люди добрые подскажите Как ставить автоматически двойные скобки () и кавычки “”, на телефоне под андроид, есть отдельные кнопочка и под скобки и под кавычки! Ни как не могу догадаться как это сделать?! Подскажите пожалуйста! Программа на которой тренюсь phyton version 3.6, тут и не могу понять, очень надоело каждый раз набирать эти символы! Помогите!

Расставить скобки

Author24 — интернет-сервис помощи студентам

Суть задачи, вводится алгебраическое выражение, содержащее целые положительные числа и знаки операций: плюс, минус и умножить. Деление не используется Выводится максимальное целое числовое значение выражения с учетом расставленных скобок.
Проще говоря, нужен код который расставит скобки и выведет максимальный результат
пример
ввод 1+2*3-2*4
вывод 28

a=eval(input("Введите математическое выражение: "))

помогите сделать алгоритм расставления скобок, не могу понять, как сделать алгоритм который будет понимать где ставить скобки

Добавлено через 2 минуты
UPD Расставит скобки таким образом, чтобы результат был максимальным

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Расставить ранги
Добрый день! Исходные данные — d1 Ключи — d2 Что должно получится в итоге — d3 import.

Скобки
a = print(».join(str(a))) Как сделать так, чтобы выводилось без квадратных скобок?

Любимые скобки
Я уверен, что 100500 раз спрашивали это, но я что-то не нашел. дан список, например: надо.

Можно ли расставить скобки так, чтобы получившееся выражение было равно нулю
Есть решение перебором для этой задачи, но хотелось бы решить ее как-нибудь по-умному, но не.

3172 / 1579 / 527
Регистрация: 21.11.2021
Сообщений: 3,123

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
from random import choice from random import randint n = randint(4, 9) m = 20 ops = ('+-**') s = '' for i in range(n): s += str( randint(1,m) ) + ' ' + choice( ops ) + ' ' s = s.rstrip( ops+' ' ) print(s) lis = list( map( lambda x: ') '+x+' (' if x in ops else x, list(s) ) ) s = ''.join(lis) s = '(' + s + ')' max_val = float('-inf') max_str = None par_count = s.count( '(' ) + s.count( ')' ) for i in range( 2 ** par_count ): b = bin(i)[2:].zfill(par_count) b_ind = 0 ss = '' for symb in s: if symb in '()': ss += ( '',symb )[ int( b[b_ind] ) ] b_ind += 1 else: ss += symb try: val = eval( ss ) if val > max_val: max_val = val max_str = ss except: pass print( f' < max_str >= < max_val >' )

Регистрация: 09.10.2021
Сообщений: 84
А как заменить ввод случайного примера на ввод с клавиатуры?
3172 / 1579 / 527
Регистрация: 21.11.2021
Сообщений: 3,123

ЦитатаСообщение от waze Посмотреть сообщение

как заменить ввод случайного примера на ввод с клавиатуры?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
ops = ('+-*') s = input( f'Введите арифметическое выражение со знаками операций < list(ops) >: ' ) lis = list( map( lambda x: ') '+x+' (' if x in ops else x, list(s) ) ) s = ''.join(lis) s = '(' + s + ')' max_val = float('-inf') max_str = None par_count = s.count( '(' ) + s.count( ')' ) for i in range( 2 ** par_count ): b = bin(i)[2:].zfill(par_count) b_ind = 0 ss = '' for symb in s: if symb in '()': ss += ( '',symb )[ int( b[b_ind] ) ] b_ind += 1 else: ss += symb try: val = eval( ss ) if val > max_val: max_val = val max_str = ss except: pass print( f' < max_str >= < max_val >' )

Регистрация: 09.10.2021
Сообщений: 84

Спасибо, безумно благодарен вам, вы обеспечили мой день хорошим настроением)

Добавлено через 6 минут
А вот если 1+2*3-2*4 такой пример вписать программа выдает ответ 20, а правильно вот так (((1+2)*3)-2)*4 ответ 28

3172 / 1579 / 527
Регистрация: 21.11.2021
Сообщений: 3,123

ЦитатаСообщение от waze Посмотреть сообщение

а правильно вот так (((1+2)*3)-2)*4 ответ 28

Да, здесь недоработка. Если сразу расставлять все потенциальные скобки, то прога зависает. Надо обдумать как это быстрее сделать.

Регистрация: 09.10.2021
Сообщений: 84

У меня если сразу скобки поставить ничего не виснет, только скобки неправильно ставит, пример выше писал

3172 / 1579 / 527
Регистрация: 21.11.2021
Сообщений: 3,123

Лучший ответ

Сообщение было отмечено waze как решение

Решение

Так как у вас в задании не требуется выводить скобки, а только результат, то задача сильно упрощается.

Вот так можно сделать:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
ops = '+-*' #============================================================================== def get_nums_and_ops(s): s_ops = list( filter( ops.count, s ) ) for op in s_ops: s = s.replace( op, ' ' ) s_nums = list( map( int, s.split() ) ) return ( s_nums, s_ops ) #============================================================================== s = input( f'Введите арифметическое выражение со знаками операций < list(ops) >: ' ) s_nums_ops = get_nums_and_ops(s) q = [ s_nums_ops ] val_max = float( '-inf' ) while q: nums_cur, ops_cur = q.pop(0) if not ops_cur: val_cur = nums_cur[0] val_max = max( val_max, val_cur ) else: for i in range( len(ops_cur) ): nums_next = nums_cur.copy() ops_next = ops_cur.copy() val = eval( str( nums_next[i] ) + ops_next[i] + str( nums_next[i + 1] ) ) nums_next[i+1] = val nums_next.pop(i) ops_next.pop(i) q.append( ( nums_next, ops_next ) ) print( val_max )

Регистрация: 09.10.2021
Сообщений: 84

Да, теперь вроде как правильно алгоритм работает

Добавлено через 10 минут
А какой смысл этого алгоритма, я имею ввиду как он скобки подставляет, через цикл?

Добавлено через 7 минут
Очень странно код рабочий, а проверочный сайт пишет compilation error, интересно в чем же проблема?

3172 / 1579 / 527
Регистрация: 21.11.2021
Сообщений: 3,123

ЦитатаСообщение от waze Посмотреть сообщение

А какой смысл этого алгоритма, я имею ввиду как он скобки подставляет, через цикл?

Ну, в чем смысл скобок, — чтобы указать последовательность выполнения операций в выражении. Ну а я разделяю выражение на список чисел и список операций и, так сказать, «вручную» выполняю эти операции во всех возможных последовательностях.

ЦитатаСообщение от waze Посмотреть сообщение

Очень странно код рабочий, а проверочный сайт пишет compilation error, интересно в чем же проблема?

Ну, скорее всего у них устаревшая версия питона и она не поддерживает что-то из того, что есть в программе.

Добавлено через 2 часа 50 минут
Да, забыл пояснить, что алгоритм, который я использовал для поиска максимального значения, — это классический поиск в ширину.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Скобки-2
Напишите функцию brackets2() для проверки правильности расстановки скобок четырех видов: ,(),<>,<>.

Скобки
Проверьте правильность расстановки скобок в выражении. Напишите функцию brackets(), принимающую.

Расставить элементы массива
Расставить элементы массива так, чтобы максимальная разница между двумя соседними элементами была.

Период в скобки
Форумчане, подскажите как заключить период в скобки? Имею в виду период, что может быть после.

Разные скобки
Строка состоит из открывающих и закрывающих скобок четырех видов: (), , <>, <>. Правильной будем.

Или воспользуйтесь поиском по форуму:

Python: Кавычки

В этом уроке мы разберемся, что такое строка и какую роль в коде играют кавычки.

Определить строку довольно просто — это некий набор символов. Представим, что у нас есть такие записи:

'Hello' 'Goodbye' 'G' ' ' '' 

Какие из этих вариантов — строки? На самом деле, все пять вариантов подходят:

  • С ‘Hello’ и ‘Goodbye’ все очевидно — мы уже работали с подобными конструкциями и называли их строками
  • ‘G’ и ‘ ‘ — тоже строки, просто в них всего по одному символу
  • » — это пустая строка, потому в ней ноль символов

Строкой мы считаем все, что находится внутри кавычек: даже если это пробел, один символ или вообще отсутствие символов.

Выше мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:

print("Dracarys!") 

Теперь представьте, что вы хотите напечатать строчку Dragon’s mother. Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:

print('Dragon's mother') # SyntaxError: invalid syntax 

Такая программа не будет работать. С точки зрения Python строчка началась с одинарной кавычки, а потом закончилась после слова dragon. Дальше были символы s mother без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: ‘) . Этот код содержит синтаксическую ошибку — это видно даже по тому, как подсвечен код.

Чтобы избежать этой ошибки, мы используем двойные кавычки. Такой вариант программы сработает верно:

print("Dragon's mother") 

Теперь интерпретатор знает, что строка началась с двойной кавычки и закончиться должна тоже на двойной кавычке. А одинарная кавычка внутри стала частью строки.

Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки неважно.

Теперь представим, что мы хотим создать такую строку:

Dragon's mother said "No" 

В ней есть и одинарные, и двойные кавычки. Нам нужно каким-то образом указать интерпретатору, что кавычки — это один из символов внутри строки, а не начало или конец строки.

Для этого используют символ экранирования: \ — обратный слэш. Если мы поставим \ перед кавычкой (одинарной или двойной), то интерпретатор распознает кавычку как обычный символ внутри строки, а не начало или конец строки:

# Экранируем кавычки вокруг No, чтобы интерпретатор # распознал их как часть строки print("Dragon's mother said \"No\"") # => Dragon's mother said "No" 

Обратите внимание, что в примере выше нам не пришлось экранировать одинарную кавычку (апостроф ‘s), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.

Если нужно вывести сам обратный слеш, то работает такое же правило. Как и любой другой специальный символ, его надо экранировать:

print("\\") # => \ 

Задание

Напишите программу, которая выведет на экран:

"Khal Drogo's favorite word is "athjahakar"" 

Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы:

"Khal Drogo's favorite word is "athjahakar""

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Как вывести фигурные скобки с переменной в Python c помощью f-строки

Мне необходимо вывести фигурные скобки с переменной внутри. Смог найти только способ вывода скобок как строки целиком:

key = 1 city = 'City' value = 22 print(f">: > - >") #: -

А так выдает ошибку:

key = 1 city = 'City' value = 22 print(f": - \n>") 

Необходимый вывод:
Отслеживать
4,503 5 5 золотых знаков 12 12 серебряных знаков 37 37 бронзовых знаков
задан 26 дек 2022 в 16:11
113 1 1 серебряный знак 7 7 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Не забывайте, что в f-строках символы < и >являются управляющими, поэтому, при необходимости вывести их как строки, их нужно экранировать путем удвоения, подробнее можно почитать в документации.

If you need to include a brace character in the literal text, it can be escaped by doubling: >.

key = 1 city = 'City' value = 22 print(f': - \n>>') 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *