首页 > 解决方案 > 字母出现计数器程序不保存用户输入的字符串

问题描述

我正在创建一个程序来计算用户输入的字符串中字母表中每个字母的出现次数。提示用户继续输入字符串,直到他们输入<end>停止输入并分析输入。

分析工作得很好。例如,当我输入第一个输入“thanks”,然后输入第二个输入“please”时,就会出现问题。该程序只会分析“请”而不是“谢谢”。我不知道为什么。

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))

标签: python

解决方案


问题是缩进,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)

推荐阅读