2016-11-24 2 views
0

Как я могу изменять прилагаемую программу для печати письмо статистики в виде какPython Вычислить символов Статистика

а = 3

б = 2

с = 1

и устраняющие использование «z» для маркировки конца строки, вместо \ r.

def getLetIndex(pline, k): 
    return pline[k] 

print("work with lists or arrays") 
list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26] 
k=0 
while k < 26: 
    list[k]=0 
    k +=1 
print("list[1]=", list[1]) 

mline=input("enter a sentence=>") 
print("you have entered=", mline) 
k=0 
while k < 26: 
    k+= 1 
    oneChar = getLetIndex(mline, k) 
    if oneChar == 'z': 
     break 
    num1 = ord(oneChar) 
    print("char=", oneChar, "char-num=", num1) 
    if num1 != 32:     # not space 
     list[num1-97+1] += 1 
print("letter statistics are below") 
k=0 
while k < 26: 
    print(list[k]) 
    k +=1 
print("list[1]=", list[1]) 
+2

В последнем цикле while измените 'print (list [k])' to 'print (" {} = {} ". Format (chr (97 + k), list [k]))' – inspectorG4dget

ответ

0

Это:

list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26] 
k=0 
while k < 26: 
    list[k]=0 
    k +=1 
print("list[1]=", list[1]) 

будет производить только список с 26 элементов, все со значением 0

Таким образом, вы можете заменить thiw с:

list = [0] * 26 

Однако это на самом деле не нужно, чтобы построить этот список (как вы можете видеть позже). Кроме того, вы не должны использовать слово list как имя переменной.

Вы также сделать следующее:

while k < 26: 
    k+= 1 
    oneChar = getLetIndex(mline, k) 
    if oneChar == 'z': 
     break 
    num1 = ord(oneChar) 
    print("char=", oneChar, "char-num=", num1) 
    if num1 != 32:     # not space 
     list[num1-97+1] += 1 

Это очевидно, что вы хотите перебрать в 26 раз, и останавливаетесь, когда встретив символ конца строки, которая устанавливается на z вашего кода. Тебе тоже этого не нужно. И другое ограничение этого - что произойдет, если введенное предложение составляет более 26 символов?

От этого, если num1 != 32: Я считаю, что вы не хотите считать пробелы. и позволяет использовать Counter от collections

Этот код:

mline=input("enter a sentence=>") 
print("you have entered=", mline) 
k=0 
while k < 26: 
    k+= 1 
    oneChar = getLetIndex(mline, k) 
    if oneChar == 'z': 
     break 
    num1 = ord(oneChar) 
    print("char=", oneChar, "char-num=", num1) 
    if num1 != 32:     # not space 
     list[num1-97+1] += 1 

теперь станут:

from collections import Counter 

mline=input("enter a sentence=>") 
mline = mline.replace(" ","")    # this will get rid of spaces 
c = Counter(mline)      # create a counter object 
for char, count in c.items():    # enumerate through the items 
    print("{} = {}".format(char, count)) # print the result 

Теперь этот результат не отсортирован, но вы получите идею. Теперь вы можете продолжить эксперимент с кодом, добавить дополнительные операторы печати или что-то еще, что вам нравится делать.

HTH.

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