Здравствуйте, как сделать так, чтобы эта программа не считала пробел буквой, а считала прописные и строчные буквы вместе как «один»

#python #python-3.x

Вопрос:

как сделать так, чтобы эта программа не считала пробел буквой, а считала прописные и строчные буквы вместе как «один»

 word = str(input())
list = []
listchcounter = []

for character  in word:
    if character not in list:
        list.append(character)
        listchcounter.append(0)
for character in word:
    for index in range(len(list)):
        if list[index] == character:
            listchcounter[index]  = 1
for index in range(len(list)):
    print("'"   list[index]   "'",'appears',listchcounter[index],'times')
 

Комментарии:

1. if character != ' ' и. character = character.lower() Я также предлагаю вам прочитать это docs.python.org/3/library/stdtypes.html#typesmapping вместо использования списков

2. Я должен сделать это через списки @Dimitry

Ответ №1:

Только изменения указаны в строке 1 .ниже() за входом. И в строке 6 символ и != » . Тогда код уже работает нормально.

 word = str(input().lower())
list = []
listchcounter = []

for character  in word:
    if character not in list and character != ' ':
        list.append(character)
        listchcounter.append(0)
for character in word:
    for index in range(len(list)):
        if list[index] == character:
            listchcounter[index]  = 1
for index in range(len(list)):
    print("'"   list[index]   "'",'appears',listchcounter[index],'times')
 

Ответ №2:

Комментарии @dimitry содержат основные способы решения вашего заявленного вопроса.

Чтобы исключить пробелы, вы хотите отфильтровать их с помощью a if character != ' ' .

Чтобы считать буквы в верхнем и нижнем регистре одинаковыми, вы хотите преобразовать все символы в строчные с помощью character = character.lower() .

Давайте сложим это вместе:

 word = "foOtball Timeout"
letters = [letter.lower() for letter in word if letter != " "]
print(letters )
 

Давая нам:

 ['f', 'o', 'o', 't', 'b', 'a', 'l', 'l', 't', 'i', 'm', 'e', 'o', 'u', 't']
 

Теперь мы можем их сосчитать. Я бы лично использовал collections.Counter() для этого, но это достаточно легко сделать вручную.

 letter_counts = {}
for letter in letters:
    letter_counts[letter] = letter_counts.get(letter, 0)   1
print(letter_counts )
 

Давая нам суть того, что требуется:

 {'f': 1, 'o': 3, 't': 3, 'b': 1, 'a': 1, 'l': 2, 'i': 1, 'm': 1, 'e': 1, 'u': 1}
 

Теперь все, что осталось, — это красиво распечатать результаты:

 for letter, count in letter_counts.items():
    print(f"The letter "{letter}" appears {count} time(s) in "{word}"")
 

Дающий:

 The letter "f" appears 1 time(s) in "foOtball Timeout"
The letter "o" appears 3 time(s) in "foOtball Timeout"
The letter "t" appears 3 time(s) in "foOtball Timeout"
The letter "b" appears 1 time(s) in "foOtball Timeout"
The letter "a" appears 1 time(s) in "foOtball Timeout"
The letter "l" appears 2 time(s) in "foOtball Timeout"
The letter "i" appears 1 time(s) in "foOtball Timeout"
The letter "m" appears 1 time(s) in "foOtball Timeout"
The letter "e" appears 1 time(s) in "foOtball Timeout"
The letter "u" appears 1 time(s) in "foOtball Timeout"
 

Полный код:

 word = "foOtball Timeout"
letter_counts = {}
for letter in [letter.lower() for letter in word if letter != " "]:
    letter_counts[letter] = letter_counts.get(letter, 0)   1
for letter, count in letter_counts.items():
    print(f"The letter "{letter}" appears {count} time(s) in "{word}"")
 

или если бы вы хотели использовать collections.Counter :

 import collections
word = "foOtball Timeout"
letter_counts = collections.Counter(l.lower() for l in word if l != " ")
for letter, count in letter_counts.items():
    print(f"The letter "{letter}" appears {count} time(s) in "{word}"")