#python
#python
Вопрос:
Я создаю программу, которая подсчитывает вхождения каждой буквы в алфавите, которые находятся в строке, вводимой пользователем. Пользователю предлагается продолжать вводить строки до тех пор, пока они не будут введены <end>
, что останавливает ввод и анализирует входные данные.
Анализ работает просто отлично. Проблема возникает, когда, например, я ввожу первый ввод «спасибо», а затем второй ввод «пожалуйста». Программа будет анализировать только «пожалуйста», а не «спасибо». Я не могу понять, почему.
programrun = True
while programrun:
stringinput = input ("Enter a sentence or word <END> to finish: ").lower()
if stringinput != "<end>":
stringinput1 = stringinput
letters =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
#print (programrun)
if stringinput == "<end>":
programrun = False
#stringinput2 = stringinput1
print (stringinput1)
for i in range(0,26):
#frequency = (int(stringinput.count(letters[i]) / 26) * 100)
length = len(stringinput1)
print(letters[i],": ",stringinput1.count(letters[i]), " Freqency: ", (float(stringinput1.count(letters[i]) / length) * 100))
Комментарии:
1. Не могли бы вы правильно сделать отступ в своем коде?
2. вы должны написать последний цикл for внутри while
3. Вы перезаписываете stringinput перед его анализом. Попробуйте использовать буквы в качестве ключей в словаре, а значение — в качестве вхождения, поэтому нет необходимости объявлять весь алфавит.
Ответ №1:
Проблема в отступе, for
цикл не был внутри while
цикла, поэтому после ввода одного слова код останавливается, я добавляю другие улучшения
- вы можете просто использовать строку с буквами вместо списка и определить ее перед циклом
- выполните итерацию непосредственно по каждой букве, а не по целым числам, затем получите доступ по индексу
- остановите код, который вводится
"<end>"
не выполняйте другие манипуляции со строками
letters = 'abcdefghijklmnopqrstuvwxyz'
while True:
stringinput = input("Enter a sentence or word <END> to finish: ").lower()
if stringinput == "<end>":
break
for letter in letters:
length = len(stringinput)
count = stringinput.count(letter)
print(letter, ": ", count, " Freqency: ", (count / length) * 100)
Комментарии:
1. Извините за формат. В VSCode отступ указан правильно, но это почему-то не перешло сюда. Еще раз извините и спасибо за помощь!
Ответ №2:
Я думаю, потому что вам нужно объединить все записи в stringinput1:
stringinput1=""
while programrun:
stringinput = input ("Enter a sentence or word <END> to finish: ").lower()
if stringinput != "<end>":
stringinput1 = stringinput1 stringinput
...