Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 04.11.2019
Сообщений: 38
1

Нужно немного доработать код

26.01.2020, 04:25. Показов 1120. Ответов 15

Author24 — интернет-сервис помощи студентам
Задание такое : если слово имеет 4 гласные (русские/английские) буквы, то нужно его вывести соответственно.
Сама проблема в том, что если эти слова разделены не пробелами, а например точками, код перестаёт работать.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GLASNIYE = ['а', 'о', 'э', 'и', 'у', 'ы', 'е', 'ё', 'ю', 'я', 'a', 'e', 'i', 'o', 'u', 'y']
znaks = [',', '.', '!', '?', ':']
 
 
def print_long_words(text):
    global GLASNIYE
    global znaks
 
    glasn_in_word = []
    text = text.split()
 
    count = 0
    for i in text:
        for j in i:
            if j.lower() in GLASNIYE:
                glasn_in_word.append(j)
                if len(glasn_in_word) == 4:
                    if i[-1] in znaks:
                        print(i[0:-1].lower())
                    else:
                        print(i.lower())
        glasn_in_word.clear()
 
print_long_words()
Примеры работы : 1)Как и в прочих заданиях этого урока, в вашем решении функция должна быть определена, но не должна вызываться.
Вывод :

заданиях
решении
определена
вызываться (здесь у меня всё норм)
2) """whatever.wherever1solution;solut1onal"""

Вывод:
solution (у меня ничего)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2020, 04:25
Ответы с готовыми решениями:

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

Как немного упростить код?
M = for i in range(10)] for row in M: print(' '.join()) Как в этом моменте if j-i>=0...

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

Нужно немного доработать код
#include <iostream> using namespace std; int main() { int n ; cin >> n; int...

15
SkyJump
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,070
Записей в блоге: 4
26.01.2020, 08:01 2
Python
1
2
3
4
5
import re
text = input().lower()
words = text.split()
for word in re.findall('[ёуеыаоэяиюaeuioy]'):
    print(word)
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
26.01.2020, 08:32 3
Hyppoprogramm, это что за дичь?
0
SkyJump
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,070
Записей в блоге: 4
26.01.2020, 08:34 4
iSmokeJC, это очень красивая и аккуратная дичь

Добавлено через 1 минуту
Батюшки, да что ж я тут понаписал?!
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
26.01.2020, 08:35 5
Hyppoprogramm, ну так то да. Если не обращать внимания на то, что она не работает.
2
SkyJump
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,070
Записей в блоге: 4
26.01.2020, 08:38 6
Python
1
2
3
4
5
6
import re
text = input().lower()
words = text.split()
for word in words:
    if re.findall('[ёуеыаоэяиюaeuioy]{1}',word) != []:
        print(word)
0
Просто Лис
Эксперт Python
5731 / 3530 / 1055
Регистрация: 17.05.2012
Сообщений: 10,360
Записей в блоге: 9
26.01.2020, 08:54 7
Для начала предлагаю разбить текст на слова.

Добавлено через 2 минуты
Hyppoprogramm
Python
1
text = 'whatever.wherever1solution;solut1onal'
Добавлено через 11 секунд
Здесь три слова.

Добавлено через 1 минуту
Python
1
print(re.split(r'[\s\.\?,!:;]', text))
Добавлено через 2 минуты
Python
1
print(re.findall(r'\w+', text))
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
26.01.2020, 09:05 8
Рыжий Лис, а я тут репу морщу на тему, что цифры - тоже разделители

Python
1
for word in re.split(r"\W|\d", text):
Добавлено через 5 минут
Рыжий Лис, надо регулярку проапгрейдить на длину. Но я, увы, в них таких высот не достиг
Python
1
print(*[re.findall(r'[ёуеыаоэяиюaeuioy]', word) for word in re.split(r"\W|\d", input()) if len(word) == 4])
Добавлено через 46 секунд
Если цифры - не разделители
Python
1
print(*[re.findall(r'[ёуеыаоэяиюaeuioy]', word) for word in re.split(r"\W", input()) if len(word) == 4])
0
Просто Лис
Эксперт Python
5731 / 3530 / 1055
Регистрация: 17.05.2012
Сообщений: 10,360
Записей в блоге: 9
26.01.2020, 09:20 9
Цитата Сообщение от iSmokeJC Посмотреть сообщение
а я тут репу морщу на тему, что цифры - тоже разделители
Блин, точно. 'wherever1solution' - это два слова...
Python
1
print(re.split(r'[\s\d\.\?,!:;]', text))
А регуляркой считать буквы... сложно
Python
1
print(re.findall(r'[ёуеыаоэяиюaeuioy]'.join(r'[qwrtpsdfghjklzxcvbnm]*' for _ in range(5)), text))
0
Особый статус
Эксперт WindowsВирусоборец
8428 / 1707 / 87
Регистрация: 15.04.2011
Сообщений: 5,515
26.01.2020, 11:14 10
А если попробовать пойти от обратного и застраховаться от любых НЕ букв для разбивки, а затем вывести все, длина чего равна 4?

Python
1
2
3
4
5
import re
 
text = 'whatever.wherever1solution;solut1onal'
 
[print(str_) for str_ in re.split(r'[^A-Za-zА-Яа-я]', text) if len(re.findall(r'[ёуеыаоэяиюaeuioy]', str_)) == 4]
0
1 / 1 / 0
Регистрация: 04.11.2019
Сообщений: 38
27.01.2020, 06:26  [ТС] 11
Этот пример подошёл только к solution. На русский текст, а также на просто введённые подряд гласные на (eng или rus) языках ничего не выводит.
0
197 / 163 / 41
Регистрация: 13.05.2019
Сообщений: 837
27.01.2020, 08:16 12
А почему нельзя просто вот так:
Python
1
2
3
4
5
6
7
8
text = input().lower()
count=0
gl="ёуеыаоэяиюaeiou"
for i in gl:
    if i in text:
        count+=1
if count >= 4:
    print(text)
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,390
27.01.2020, 08:28 13
Цитата Сообщение от Matrix3007 Посмотреть сообщение
почему нельзя просто вот так
А ты скорми своей проге строку по заданию
Как и в прочих заданиях этого урока, в вашем решении функция должна быть определена, но не должна вызываться
и посмотри
0
Просто Лис
Эксперт Python
5731 / 3530 / 1055
Регистрация: 17.05.2012
Сообщений: 10,360
Записей в блоге: 9
27.01.2020, 09:08 14
Цитата Сообщение от Matrix3007 Посмотреть сообщение
А почему нельзя просто вот так:
Можно, но ты написал только для одного слова.

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Для начала предлагаю разбить текст на слова.
0
197 / 163 / 41
Регистрация: 13.05.2019
Сообщений: 837
27.01.2020, 10:39 15
Тогда так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
text = input().lower()
count=0
gl="ёуеыаоэяиюaeiou"
znk=[".", ",", ";", "?", "!", "'", '"', "-"]
for i in range(10):
    znk.append(str(i))
t=text.split(" ")
for i in znk:
    for j in t:
        try:
            if t.index(j)==0:
                t=[]
        except:
            pass
        t+=j.split(i)
        if j=="":
            del t[t.index(j)]
for b in t:
    for c in b:
        if c in gl:
            count+=1
    if count >= 4:
        print(b)
    count=0
Не очень красиво, но работает.

Добавлено через 1 час 5 минут
Менее костыльный вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
text = input().lower()
count=0
gl="ёуеыаоэяиюaeiou"
znk=[".", ",", ";", "?", "!", "'", '"', "-", ":"]
for i in range(10):
    znk.append(str(i))
for i in znk:
    text=text.replace(i, "_")
print(text)
for i in text.split("_"):
    for j in i:
        if j in gl:
            count+=1
    if count >= 4:
        print(i)
    count=0
1
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
29.01.2020, 07:46 16
Python
1
print(re.findall(r'(?i)(?:[a-zа-яё]*?[ёуеыаоэяиюaeuioy]){4}[a-zа-яё]*', text))


Python
1
print([m.group(0) for m in re.finditer(r'(?i)(?<![a-zа-яё])(?=((?:[a-zа-яё]*?[ёуеыаоэяиюaeuioy]){4}))\1(?![a-zа-яё]*?[ёуеыаоэяиюaeuioy])[a-zа-яё]*', text)])
0
29.01.2020, 07:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2020, 07:46
Помогаю со студенческими работами здесь

Работа с структурой в С++ (код есть, нужно немного доработать)
Приветствую. Есть задание: Создать структуру STUDENT, которая имеет поля: 1. NAME. ФИО. 2....

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

Нужно немного доработать программу
Задание: #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;stdlib.h&gt; int** func(int **, int *,...

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

Построить график функции(нужно немного доработать)
Задание: Построить график функции, заданной явно: (x^2 / p) - (y^2 / q) = 2z, (...

Сделал поиск по DBGrid , работает, нужно немного доработать
поиск осуществляется по DBGrid по колонке фамилия вот кодADOTable1.Filtered := False;...

Мне нужно немного доработать программу, работающую с классом three_digit:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru