Python как поставить точку без пробела
Перейти к содержимому

Python как поставить точку без пробела

  • автор:

В строке заменить пробелы символом *

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

Решение задачи на языке программирования Python

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

Сначала избавляемся от пробелов в начале и конце строки, если они имеются. Для этого перебираем строку посимвольно сначала или с конца. Как только встречается первый непробельный символ, берем срез от него до конца строки или до начала, в случае удаления пробелов с конца.

Далее снова посимвольно перебираем строку. Если очередной символ не является пробелом, то формировать новую строку добавлением к ней этого символа. В ветку elif попадают символы пробела, но здесь проверяется не был ли равен предыдущий символ пробелу. Если это не так (не был равен), то только тогда к новой строке добавляется «*». Лишние пробелы будут просто пропущены и не добавлены к новой строке.

s = input() i = 0 while s[i] == ' ': i += 1 s = s[i:] i = len(s) while s[i - 1] == ' ': i -= 1 s = s[:i] s_new = s[0] i = 1 while i  len(s): if s[i] != ' ': s_new += s[i] elif s[i - 1] != ' ': s_new += '*' i += 1 print(s_new + '!')

Пример выполнения скрипта:

one two three four f*ve six seven one*two*three*four*f*ve*six*seven!

Однако в языке программирования Python данную задачу проще решить, преобразовав строку в список. С помощью метода split строка разделяется на слова по пробелам. При этом неважно сколько их. Далее остается только снова собрать слова в строку. Проще это сделать строковым методом join :

s = input() l = s.split() s1 = '*'.join(l) print(s1)

X Скрыть Наверх

Решение задач на Python

Правила оформления Python-кода

Рекомендуется использовать 4 пробела на каждый уровень отступа. Python 3 запрещает смешивание табуляции и пробелов в отступах. Код, в котором используются и те, и другие типы отступов, должен быть исправлен так, чтобы отступы в нем были расставлены только с помощью пробелов.

 def no_tab_using(): no_tab = 'Using 4 spaces' 
 def use_tab(): one_tab_using = 'Ugly' 

2. Точки с запятой

Не разделяйте ваши строки с помощью точек с запятой и не используйте точки с запятой для разделения команд, находящихся на одной строке.

 a = 'String' b = 15 c = 7.2 
 a = 'String'; b = 15; c = 7.2; 

3. Скобки

Используйте скобки экономно. Не используйте их с выражением return или с условной конструкцией, если не требуется организовать перенос строки. Однако скобки хорошо использовать для создания кортежей.

 if budget < 0: return False # ------------------- while counter  
 if (budget < 0): return (False) # ------------------- if not(line): continue # ------------------- return (result) 

4. Пробелы в выражениях и инструкциях

4.1 Пробелы и скобки

4.1.1 Не ставьте пробелы внутри каких-либо скобок (обычных, фигурных и квадратных).

 pineapple(pine[1], ) 
 pineapple( pine[ 1 ], < apple: 2 >) 

4.1.2 Никаких пробелов перед открывающей скобкой, которая начинает список аргументов, индекс или срез.

 get_number_of_guests(1) 
 get_number_of_guests (1) 
 dish['ingredients'] = cook_book[:3] 
 dish ['ingredients'] = cook_book [:3] 

4.2 Пробелы рядом с запятой, точкой с запятой и точкой

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

 if number_of_goods == 4: print(number_of_goods, total_price) 
 if number_of_goods == 4 : print(number_of_goods , total_price) 

4.3 Пробелы вокруг бинарных операторов

4.3.1 Окружайте бинарные операторы одиночными пробелами с каждой стороны. Это касается присваивания ( = ), операторов сравнения ( == , , > , != , <> , , >= , in , not in , is , is not ), и булевых операторов ( and , or , not ). Используйте, как вам покажется правильным, окружение пробелами по отношению к арифметическим операторам, но расстановка пробелов по обеим сторонам бинарного оператора придает целостность коду.

 counter == 1 
 counter  

4.3.2 Не используйте более одного пробела вокруг оператора присваивания (или любого другого оператора) для того, чтобы выровнять его с другим.

 price = 1000 price_with_taxes = 1200 price_with_taxes_and_discounts = 1100 
 price = 1000 price_with_taxes = 1200 price_with_taxes_and_discounts = 1100 

4.3.3 Не используйте пробелы по сторонам знака = , когда вы используете его, чтобы указать на именованный аргумент или значение по умолчанию.

 def complex(real, imag=0.0): return magic(r=real, i=imag) 
 def complex(real, imag = 0.0): return magic(r = real, i = imag) 

5. Длина строк

Ограничивайте длину строк 79 символами (а длину строк документации и комментариев — 72 символами). В общем случае не используйте обратный слеш в качестве перехода на новую строку. Используйте доступное в Python явное объединение строк посредством круглых и фигурных скобок. Если необходимо, можно добавить дополнительную пару скобок вокруг выражения.

 style_object(self, width, height, color='black', design=None, emphasis=None, highlight=0) if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong'): 

Если ваш текст не помещается в одну строку, используйте скобки для явного объединения строк.

 long_string = ('This will build a very long long ' 'long long long long long long string') 

Что касается длинных URL в комментариях, то располагайте их, если это необходимо, на одной строке.

 # See details at # http://www.example.com/example/example/example/example/example/example/example_example.html 
 # See details at # http://www.example.com/example/example/example/example/example/\ # example/example_example.html 

Обратный слеш иногда используется. Например, с длинной конструкцией with для переноса блока инструкций.

 with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read()) 

Ещё один подобный случай — длинные assert .

6. Пустые строки

Отделяйте функции (верхнего уровня, не функции внутри функций) и определения классов двумя пустыми строками. Определения методов внутри класса отделяйте одной пустой строкой. Две пустые строки должны быть между объявлениями верхнего уровня, будь это класс или функция. Одна пустая строка должна быть между определениями методов и между объявлением класса и его первым методом.

 import os . . class MyClass: . def __init__(self): self.name = 'My name' . def f(self): return 'hello world' . . def MyFunc(): i = 12345 return i . myclass = MyClass() 

Используйте (без энтузиазма) пустые строки в коде функций, чтобы отделить друг от друга логические части.

Python расценивает символ control+L как незначащий (whitespace), и вы можете использовать его, потому что многие редакторы обрабатывают его как разрыв страницы — таким образом, логические части в файле будут на разных страницах. Однако не все редакторы распознают control+L и могут на его месте отображать другой символ.

7. Имена

Имена, которых следует избегать:

    Односимвольные имена, исключая счетчики либо итераторы. Никогда не используйте символы l (маленькая латинская буква «эль»), O (заглавная латинская буква «о») или I (заглавная латинская буква «ай») как однобуквенные идентификаторы. В некоторых шрифтах эти символы неотличимы от цифры один и нуля. Если очень нужно l , пишите вместо неё заглавную L . Хорошо

 long_name = 'Хорошее имя переменной' L = 'Допустимо, но лучше избегать' 
 l = 1 I = 1 O = 0 
 import my_module 
 import my-module 
 my_variable = 'Variable' 
 __myvariable__ = 'Variable' 

7.1 Имена функций

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

 my_variable = 'Variable' 
 My-Variable = 'Variable' 

Стиль mixedCase допускается в тех местах, где уже преобладает такой стиль — для сохранения обратной совместимости.

7.2 Имена модулей и пакетов

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

Так как имена модулей отображаются в имена файлов, а некоторые файловые системы являются нечувствительными к регистру символов и обрезают длинные имена, очень важно использовать достаточно короткие имена модулей — это не проблема в Unix, но, возможно, код окажется непереносимым в старые версии Windows, Mac, или DOS.

 import vkapi 
 import My-First-VKontakte-API-Modul 

7.3 Имена классов

Все имена классов должны следовать соглашению CapWords почти без исключений.

 class MyFirstClass: 

Иногда вместо этого могут использоваться соглашения для именования функций, если интерфейс документирован и используется в основном как функции.

Обратите внимание, что существуют отдельных соглашения о встроенных именах: большинство встроенных имен — одно слово (либо два слитно написанных слова), а соглашение CapWords используется только для именования исключений и встроенных констант.

Так как исключения являются классами, к исключениями применяется стиль именования классов. Однако вы можете добавить Error в конце имени (если, конечно, исключение действительно является ошибкой).

7.4 Имена констант

Константы обычно объявляются на уровне модуля и записываются только заглавными буквами, а слова разделяются символами подчеркивания.

 MAX_OVERFLOW = 10 TOTAL = 100 

8. Комментарии

Комментарии, противоречащие коду, хуже, чем отсутствие комментариев. Всегда исправляйте комментарии, если меняете код!

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

Ставьте два пробела после точки в конце предложения.

Если вы — программист, не говорящий по-английски, то всё равно следует использовать английский язык для написания комментариев. Особенно, если нет уверенности на 120% в том, что этот код будут читать только люди, говорящие на вашем родном языке.

8.1 Блоки комментариев

Блок комментариев обычно объясняет код (весь или только некоторую часть), идущий после блока, и должен иметь тот же отступ, что и сам код. Каждая строчка такого блока должна начинаться с символа # и одного пробела после него (если только сам текст комментария не имеет отступа).

Абзацы внутри блока комментариев разделяются строкой, состоящей из одного символа # .

8.2 Комментарии в строке с кодом

Старайтесь реже использовать подобные комментарии.

Такой комментарий находится в той же строке, что и инструкция. «Встрочные» комментарии должны отделяться хотя бы двумя пробелами от инструкции. Они должны начинаться с символа # и одного пробела.

Комментарии в строке с кодом не нужны и только отвлекают от чтения, если они объясняют очевидное.

 counter = counter + 1 # Increment counter 

8.3 Строки документации

Соглашения о написании хорошей документации (docstrings) зафиксированы в PEP 257.

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

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

 """Return something useful Optional plotz says to frobnicate the bizbaz first. """ 

Для однострочной документации можно оставить """ на той же строке.

9. Циклы

9.1 Циклы по спискам

Если нам необходимо в цикле пройти по всем элементам списка, то хорошим тоном (да и более читаемым) будет такой способ:

 colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print(color) 

И хотя бывалые программисты или просто любители C могут использовать и такой код, это моветон.

 colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print(colors[i]) 

А если нужно пройти по списку задом наперед, то лучше всего использовать метод reversed:

 colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print(color) 

Вместо того чтобы писать избыточный код, который и читается-то не очень внятно.

 colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)-1, -1, -1): print(colors[i]) 

9.2 Циклы по списку чисел

Если есть необходимость пройти в цикле по ряду чисел, то метод range будет намного приемлемее, как минимум потому, что этот метод потребляет намного меньше памяти, чем вариант в блоке "Плохо". А представьте, что у вас ряд из трёх миллиардов последовательных чисел!

 for i in range(6): print(i**2) 
 for i in [0, 1, 2, 3, 4, 5]: print(i**2) 

9.3 Циклы по спискам с индексами

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

 colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print(i, '-->', color) 
 colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print(i, '-->', colors[i]) 

9.4 Циклы по двум спискам

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

 names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in zip(names, colors): print(name, '-->', color) 
 names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] n = min(len(names), len(colors)) for i in range(n): print(names[i], '-->', colors[i]) 

10. Импорты

Каждый импорт, как правило, должен быть на отдельной строке.

 import os import sys 
 import sys, os 

В то же время, можно писать так:

 from subprocess import Popen, PIPE 

Импорты всегда располагаются в начале файла, сразу после комментариев уровня модуля, строк документации, перед объявлением констант и объектов уровня модуля. Импорты должны быть сгруппированы в порядке от самых простых до самых сложных:

  • импорты из стандартной библиотеки,
  • сторонние импорты,
  • импорты из библиотек вашего приложения.

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

 import foo from foo import bar from foo.bar import baz from foo.bar import Quux from Foob import ar 

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

 import mypkg.sibling from mypkg import sibling from mypkg.sibling import example 

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

 from . import sibling from .sibling import example 

Следует избегать шаблонов импортов ( from import * ), так как они делают неясным то, какие имена присутствуют в глобальном пространстве имён, что вводит в заблуждение как читателей, так и многие автоматизированные средства.

Рекомендуем также ознакомиться с полной версией соглашения о том, как писать код на Python (PEP 8)

Образуется пробел перед точкой в конце предложения

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

*-
Доброго времени суток. Решил самостоятельно изучать пайтон с абсолютного нуля в программировании. Мне сложно, но очень интересно. Вопрос собственно состоит в заголовке: Почему в результате образуется пробел в конце предложения перед точкой? Мне очень интересно понять эту причину и как ее устранить. Результат собственно таков: "The next number for the number 4 is 6 .
The next number for the number 4 is 3 ." Спасибо за внимание, хорошего настроения!

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

Вывести строку, у которой в конце точка. Если точки нет, или перед точкой не буква, а пробел - то не выводить
Я написал код и он работает т.е выводит текст если в конце точка, если точки нет или пробел после.

Удалить пробел перед точкой
Вводится текст - необходимо удалить все пробелы перед точкой(запятой). Понимаю, что нужно.

Количество слов в тексте, если заданое слово в конце перед точкой.
Подскажите, вот так работает, но если слово в конце предложения заканчивающегося точкой. что.

Перенести часть строки в конец предложения перед точкой
Здравствуйте. Требуется в данном тексте: Если разложить поле на монохроматические.

Эксперт Python

4625 / 2045 / 361
Регистрация: 17.03.2012
Сообщений: 10,117
Записей в блоге: 6
Используйте format.
Для 3.6+ есть запись:

f'тын-дын и '

Для более ранних

'тын-дын и '.format(b, c)

c варицаиями.
Регистрация: 21.06.2019
Сообщений: 16

dondublon
Благодарю за ответ. Но мне хотелось бы понять, почему так получается и принцип действия вашего ответа. Боюсь, что если не пойму этого, то двигаться дальше будет сложнее. Спасибо!

Эксперт Python

4625 / 2045 / 361
Регистрация: 17.03.2012
Сообщений: 10,117
Записей в блоге: 6
specte, что получается, форматирование?
Регистрация: 21.06.2019
Сообщений: 16

dondublon,
Я даже не знаю, для чего нужно это форматирование, что оно даст? Почему появляется этот пробел если не производить форматирование? откуда он берется?

Эксперт Python

1355 / 652 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

Лучший ответ

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

Решение

specte, попытался объяснить

1 2 3 4 5 6
a = int(input()) b = a - 1 c = a + 1 print("The next number for the number", b, "is", c, '.') # print старый print("The next number for the number", b, "is" , b - 1 ,'.') print(f'тын-дын и ')# print новый, где f- фраза, а и - результирующие

Эксперт Python

4625 / 2045 / 361
Регистрация: 17.03.2012
Сообщений: 10,117
Записей в блоге: 6

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

print(. , sep='')

4650 / 3254 / 1133
Регистрация: 21.03.2016
Сообщений: 8,003

Лучший ответ

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

Решение

specte, потому что функция принт по умолчанию выводит аргументы через пробел

>>> print('one','two',1,2,'.') one two 1 2 .

и если вы можете сложить строки

>>> print('one','two' +'.') one two

.
то с числами это не пройдет

1 2 3 4 5 6
>>> print('one','two',1,2 +'.') Traceback (most recent call last): File "", line 1, in module> print('one','two',1,2 +'.') TypeError: unsupported operand type(s) for +: 'int' and 'str' >>>

поэтому числа надо привести к строке

1 2 3
>>> print('one','two',1,str(2) +'.') one two 1 2. >>>

ну с форматированием проще

1 2 3
>>> print(f"   ") one two 1 2. >>>

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

dondublon, Dax,
Благодарю вас, господа за внимание, за терпение и за ваши попытки мне обьяснить. Я надеюсь, что понял все правильно.
Дело еще вот в чем. Тот интерактивный учебник, который я читаю, с подобными задачами, обьясняет на других примерах решения подобных задач, но как правило, такие обьяснения зачастую находятся не до этих задач, а после и в некоторых случаях вообще нет никаких обьяснений. Просто задача, а как мне ее решать - мои проблемы)

читал некоторые другие учебники и во всех, я все прекрасно понимаю и тут резко теряется смысл, появляется ощущение, будто из книги вырвали несколько страниц и текущая часть становится для меня непонятной изза оборваной нити, но читаю ведь все по порядку, стараюсь полученные знания практиковать. Я надеюсь, вы понимаете мой русский язык. Спасибо за внимание!

Добавлено через 3 минуты
Semen-Semenich, Вот прям разжевали и скормили.
Отличный ответ. Вам благодарность!

1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6

specte, Если хотите учебник, в котором все максимально разжевано и объяснено, то изучайте
Лутц М. Изучаем Python (4-е издание, 2011). Этот учебник считается классикой питона. Но объем его значительный и требует серьезного изучения питона.

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

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

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

Перед каждой точкой в строке вставлять в скобках сумму ascii кодов всех букв предложения
Пример qwerty. Не работает программа, вот мой код: int ascii() < string st2=""; string.

Вместо новой строки образуется просто пробел
Работаю в Ubuntu. Есть цикл: <? for ($i=1; $i<10; $i++) < for($j=1; $j<10; $j++) echo.

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

Вывод в Python без новой строки или пробела

Баннер

В Python при использовании функции print() по умолчанию каждый новый элемент выводится с новой строки или с пробелом. Это логично для большинства случаев, но иногда возникает необходимость вывести данные без перехода на новую строку или пробела. Например, есть задача вывести четыре точки подряд без пробелов и переносов строк.

Стандартный код Python выглядит так:

for i in range(4): print('.')
print('.', '.', '.', '.')

В обоих случаях результат будет выведен с переходами на новую строку или с пробелами.

Для того чтобы решить данный вопрос, необходимо использовать параметр end в функции print() . Параметр end определяет, что будет добавлено после каждого вывода. По умолчанию значение end равно "\n" , что означает переход на новую строку.

Если нужно выводить элементы без перехода на новую строку, можно установить значение end равным пустой строке:

for i in range(4): print('.', end='')

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

Таким образом, функция print() в Python предоставляет гибкий функционал для контроля формата вывода данных.

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

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