#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}"")