Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование на Python. Яндекс Учебник. Вещественные числа

Юлия Чудиновских Ученик (116), закрыт 1 год назад
Дан текст на русском языке, в котором встречаются корректно записанные числа. Все действительные числа записаны через точку. В тексте может быть несколько предложений, заканчивающихся на точку, восклицательный или вопросительный знак. Все предложения разделяются пробелом.
Выведите все числа из текста в столбик.

Ввод

Добрый день. Сегодня чисел у меня 3. Одно из них — это 5.4. Ещё есть 3.14 и 7.8.Не могу убрать лишние точки...
Лучший ответ
Молот Шотландцев Высший разум (300965) 1 год назад
 s = 'Добрый день. Сегодня чисел у меня 3. Одно из них — это 5.4. Ещё есть 3.14 и 7.8.'.split(' ') 
n = list(filter(lambda x: x[0].isdigit(),s))
nn = list(map(lambda x: ''.join(list(x)[:-1]) if x[-1] == '.' else x, n))
result = list(map(lambda x: int(x) if not '.' in x else float(x),nn))
print(*result)
Остальные ответы
Артём Марченко Ученик (178) 1 год назад
Может сделать условие, что после точки нет пробела? Тогда не должны быть лишние точки. Я не очень разбираюсь, сам в C#
Улугбек Мастер (1269) 1 год назад
Может попробовать взять срез? Берёшь первый символ из строки, если он относится к числам, то смотри последний символ, если он равен точке, то удаляй последний символ и вноси эту строку в результат.

Что-то наподобие:
 a="5.1." 
if a[0].isdigit():
if a[-1] == ".":
a=a[:-1]
print(a)
Ирина Викторовна Лисенкова Профи (604) 1 год назад
import re
x = input()
p = '[\d]*[.]+[.,\d]+[\d]*[.][\d]*[.]+|[\d]*[.][\d]+|[\d]+'
if re.search (p, x) is not None:
for catch in re.finditer(p, x):
print(catch[0])
Олег ГончаровУченик (172) 1 год назад
Идеально! Спасибо, работает безошибочно.
Если же требуется посчитать количество чисел в тексте, то добавляем счётчик и выводим его значение:
import re
x = input()
n = 0
p = '[\d]*[.]+[.,\d]+[\d]*[.][\d]*[.]+|[\d]*[.][\d]+|[\d]+'
if re.search (p, x) is not None:
for catch in re.finditer(p, x):
h = catch[0]
n = n + 1
print(n)
Андрей Швидченко Профи (518) 1 год назад
s = input()
k = 0
s = ' ' + s
s = s.replace('. ', '')
for i in range(len(s) - 1):
if s[i] == ' ' and s[i+1].isdigit():
k += 1
print(k)
Александр Богачев Ученик (130) 11 месяцев назад
text = input()
alf = '0123456789'
word = text.split()
print(word)
cnt = 0
for i in range(len(word)):
if word[i][0] in alf:
print(word[i][0])
cnt+=1
print(cnt)
Александр БогачевУченик (130) 11 месяцев назад
text = input()
alf = '0123456789'
word = text.split()


for i in range(len(word)):
if word[i][0] in alf and (word[i][-1] == '.' or word[i][-1] == '?'):
print(word[i][:-1])
elif word[i][0] in alf and word[i][-1] != '.':
print(word[i])
Александр БогачевУченик (130) 11 месяцев назад
Этот вариант удовлетворил учебник
text = input()
alf = '0123456789'
word = text.split()
#print(word)

for i in range(len(word)):
if word[i][0] in alf and word[i][-1] != '.' and word[i][-1] != '?':
print(word[i])
elif word[i][0] in alf and (word[i][-1] == '.' or word[i][-1] == '?'):
print(word[i][:-1])
Похожие вопросы