Попытка удалить гласные с пользовательского ввода с помощью функции [duplicate]

учебная страница .

Необработанный тип - это имя общего класса или интерфейса без каких-либо аргументов типа. Например, с учетом общего класса Box:

public class Box {
    public void set(T t) { /* ... */ }
    // ...
}

Чтобы создать параметризованный тип поля, вы указываете фактический аргумент типа для параметра формального типа T:

Box intBox = new Box<>();

Если аргумент фактического типа опущен, вы создаете необработанный тип Box:

Box rawBox = new Box();

6
задан Grijesh Chauhan 5 February 2014 в 19:13
поделиться

13 ответов

vowels = ('a', 'e', 'i', 'o', 'u', 'A', 'I', 'E', 'O', 'U')

for char in text:

    if char in vowels:

        text = text.replace(char, '')

return text
10
ответ дан Grijesh Chauhan 21 August 2018 в 13:39
поделиться
  • 1
    Разве это не должно быть [l for l in c if l not in vowels]? – kiley.a 5 February 2014 в 17:57
  • 2
    @lanAuld благодарит Исправлено. – Grijesh Chauhan 5 February 2014 в 17:57
  • 3
    Вы можете оставить [] и использовать неявный генератор вместо этого промежуточного списка. – Chris Wesseling 5 February 2014 в 17:59
  • 4
    @ChrisWesseling см. stackoverflow.com/questions/9060653/… для вызова ''.join() быстрее использовать выражение списка вместо выражения генератора. – Grijesh Chauhan 5 February 2014 в 18:00
  • 5
    @GrijeshChauhan :-) Я был только в процессе timeit'ing это – Chris Wesseling 5 February 2014 в 18:01
12
ответ дан Grijesh Chauhan 1 November 2018 в 07:45
поделиться

Я знаю, что на эту тему есть много правильных решений, но я решил добавить несколько интересных способов решения этой проблемы. Если вы пришли из C ++ / C # или Java, вы будете использовать что-то вроде сравнения, а затем действия, используя индекс, чтобы удалить ненужную запись в цикле for. У Python есть функции Remove и Del. Функция удаления использует значение, а del использует индекс. Питоновское решение находится в последней функции. Давайте посмотрим, как мы можем это сделать:

Здесь мы используем индекс в цикле for и del, очень похожий в C ++:

def remove_vol(str1):
     #list2 = list1 # this won't work bc list1 is the same as list2 meaning same container#
    list1 = list(str1)
    list2 = list(str1)
    for i in range(len(list1)):
        if list1[i] in volwes:
            vol = list1[i]
            x = list2.index(vol)
            del list2[x]
    print(list2)

Используя функцию remove:

def remove_vol(str1): 
      list1 = list(str1)
      list2 = list(str1)
      for i in list1:
          if i in volwes:
              list2.remove(i)
      print(list2)

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

def remove_vol(str1):  
    list1 = list(str1)
    clean_str = ''
    for i in range(len(list1)):
        if list1[i] not in volwes:
            clean_str += ''.join(list1[i])
    print(clean_str)

То же, что и в решении выше, но с использованием значения:

def remove_vol(str1):
    list1 = list(str1)
    clean_str = ''
    for i in list1:
        if i not in volwes:
            clean_str += ''.join(i)
    print(clean_str)

Как вам это сделать в python? Воспользоваться списком! Это красиво:

def remove_vol(list1):
    clean_str = ''.join([x for x in list1 if x.lower() not in volwes])
    print(clean_str)
0
ответ дан abagshaw 21 August 2018 в 13:39
поделиться
def anti_vowel(text):
  new_text = ""
  for i in text:
    if i == 'a' or i == 'A':
      pass
    elif i == 'e' or i == 'E':
      pass
    elif i == 'I' or i == 'i':
      pass
    elif i == 'o' or i == 'O':
      pass
    elif i == 'u' or i == 'U':
      pass
    else:
      new_text = new_text + i
  return new_text

print anti_vowel('Hey look Words!')
0
ответ дан Abhilash Mishra 21 August 2018 в 13:39
поделиться

Вы должны сделать это:

инициализировать newstr до c, а затем

for x in c.lower():
    if x in vowels:
        newstr = newstr.replace(x, "")

Это потому, что str.replace(old, new[, max]) возвращает копию строки после замены символы:

Метод replace () возвращает копию строки, в которой вхождения старых были заменены на новые, опционально ограничивая количество замен до макс.

< / blockquote>

Итак, это правильный код:

def anti_vowel(c):
    newstr = c
    vowels = ('a', 'e', 'i', 'o', 'u')
    for x in c.lower():
        if x in vowels:
            newstr = newstr.replace(x,"")

    return newstr

Вы также можете сделать это более питоническим способом:

''.join([x for x in c if x not in vowels])
4
ответ дан gravetii 21 August 2018 в 13:39
поделиться

Моя реализация:


# Ask the user for input:
user_input = input("enter a string with some vowels: ")
print("input string: " + str(user_input))
vowels = ('a','e','i','o','u','A','E','I','O','U')
new_string="";
for i in range(0,len(user_input),1):
    if user_input[i] in vowels:
        print ('found a vowel, removing...')
    else:
        new_string+=user_input[i]
print("I've removed the vowels for you. You're welcome! The new string is: " + new_string)
0
ответ дан Idodo 21 August 2018 в 13:39
поделиться

Почему бы вам не сделать это с регулярным выражением? Согласно документации , что-то вроде этого должно работать:

import re

def anti_vowel(s):
    result = re.sub(r'[AEIOU]', '', s, flags=re.IGNORECASE)
    return result

Если вы часто используете эту функцию, вы можете скомпилировать регулярное выражение и использовать скомпилированную версию.

7
ответ дан kale 21 August 2018 в 13:39
поделиться
  • 1
    Это похоже на лучший подход ко мне (только комментирование из-за ошибочного голосования) – Jonathan 7 August 2014 в 20:13

Попробуйте String.translate.

>>> "Hey look words".translate(None, 'aeiouAEIOU')
'Hy lk wrds'

string.translate (s, table [, deletechars])

Удалить все символы из s, которые находятся в deletechars ( если есть), а затем перевести символы с помощью таблицы, которая должна быть 256-символьной строкой, дающей перевод для каждого символьного значения, индексированный его порядковым номером. Если таблица None, то выполняется только шаг удаления символа.

https://docs.python.org/2/library/string.html#string.Template. замените

Или, если вы используете newfangled Python 3:

>>> table = str.maketrans(dict.fromkeys('aeiouAEIOU'))
>>> "Hey look words.translate(table)
'Hy lk wrds'
6
ответ дан Liyan Chang 21 August 2018 в 13:39
поделиться
  • 1
    Это лучший способ, я думаю, я предпочитаю использовать инструменты, предоставляемые языком, для написания нового. – Grijesh Chauhan 31 January 2016 в 21:26
  • 2
    Приятно, но это не работает в Python3. 'test'.translate(str.maketrans('aeiouAEIOU', '-'*10)) производит t-st, но не может заменить None в Python 3 – Wes 8 March 2018 в 18:36
  • 3
    Обновлено для Python 3. Согласитесь, что это немного более неудобно. – Liyan Chang 10 March 2018 в 02:56

Достаточно простой подход:

def anti_vowel(text):
    t = ''
    for c in text:
        if c in "aeiouAEIOU":
            pass
    else:  
        t += c  
    return t  
0
ответ дан markwalker_ 21 August 2018 в 13:39
поделиться
def anti_vowel(text):
new=[]
vowels = ("aeiouAEIOU")
for i in text:
    if i not in vowels:
        new.append(i)
return ''.join(new)

Надеюсь, это поможет ..

1
ответ дан niksy 21 August 2018 в 13:39
поделиться
def anti_vowel(text):
    t=""
    for c in text:
        for i in "ieaouIEAOU":
            if c==i:
                c=""
            else:
                c=c
        t=t+c
    return t
0
ответ дан Paul Roub 21 August 2018 в 13:39
поделиться
  • 1
    Добро пожаловать в переполнение стека! Как правило, ответы гораздо полезнее, если они включают объяснение того, что должен делать код, и почему это решает проблему, не представляя других. – Lonely Neuron 17 April 2018 в 22:40

Другой вариант - отказаться от переменной гласного и поместить символ в цикл.

    def anti_vowel(text):
        for i in "aeiouAEIOU":
            text = text.replace(i,"")
        return text

    print anti_vowel("HappIEAOy")
4
ответ дан Plaisance 21 August 2018 в 13:39
поделиться

Еще одним более простым способом может быть извлечение негласных символов из строки и их возврат.

def anti_vowel(text):
    newstring=""
    for i in text:
        if i not in "aeiouAEIOU":
            newstring=newstring+i
    text=newstring
    return text
1
ответ дан user5532093 21 August 2018 в 13:39
поделиться
  • 1
    одна вещь, вы можете вернуть newstring вместо текста – Paddy 4 August 2017 в 10:58
Другие вопросы по тегам:

Похожие вопросы: