2015-05-19 2 views
1
vowels = 'aeiou' 

# take input from the user 
ip_str = raw_input("Enter a string: ") 

# make it suitable for caseless comparisions 
ip_str = ip_str.casefold() 

# make a dictionary with each vowel a key and value 0 
count = {}.fromkeys(vowels,0) 

# count the vowels 
for char in ip_str: 
    if char in count: 
     count[char] += 1 

print(count) 

Ошибка:При использовании casefold(), я получаю сообщение об ошибке, как "AttributeError: 'ул' объект не имеет атрибута 'casefold'"

Line - ip_str = ip_str.casefold() 
AttributeError: 'str' object has no attribute 'casefold' 

ответ

3

Python 2.6 не поддерживает метод str.casefold() ,

От str.casefold() documentation:

New in version 3.3.

Вам нужно перейти на Python 3.3 или выше, чтобы иметь возможность использовать его.

Нет никаких хороших альтернатив, кроме реализации самого алгоритма ввода в Юникод. См How do I case fold a string in Python 2?

Однако, так как вы обращаетесь с байтовой строки здесь (а не Unicode), вы могли бы просто использовать str.lower() и сделать с ней.

+0

вы можете, пожалуйста, объясните мне это заявление Count = {} .fromkeys (гласные, 0) –

+0

В приведенном выше комментарий, что делает {} .fromkeys() означает –

+0

@ NikhilKadam: довольно осмотрительный способ использования метода '' dict.fromkeys() ') (https://docs.python.org/2/library/stdtypes.html#dict.fromkeys), он создает новый словарь с элементами из «гласных» в виде ключей, каждый из которых имеет значение, равное «0». –

1

В python 2.x вы получите сообщение об ошибке, когда используете casefold().

Вы можете использовать только lower(), это не то же самое, но сопоставимое.

Read: str.casefold()

Casefolding is similar to lowercasing but more aggressive because it is intended to remove all case distinctions in a string. For example, the German lowercase letter 'ß' is equivalent to "ss". Since it is already lowercase, lower() would do nothing to 'ß'; casefold() converts it to "ss".

Смежные вопросы