В следующем коде все работает, как и ожидалось.
Он получает пользовательский ввод длиной 4 символа, который заканчивается 0.
И просто добавляет в диктофон хранилища вхождения гласныхи согласные.
input ="" #get input from user
while 4 < len(input) or 4 > len(input) or input[-1] != "0": #string has to be 4 char long and end in 0
input = raw_input("insert code:")
occurrences = {"a":0,"e":0,"i":0,"o":0,"u":0,"consonants":0} #store the vouel count
for x in input:
if x in occurrences.keys():
occurrences[x] += 1 #count cowels
elif x != "0":
occurrences["consonants"] += 1 #count consonants
for x in occurrences:
if occurrences[x] > 0 and x != "consonants":
print x + ",",
print "were inserted",
for x in occurrences:
if occurrences[x] > 0 and x != "consonants":
print str(occurrences[x]) + ",",
print "times respectively"
if occurrences["consonants"] == 1:
print "there was %d consonant"%occurrences["consonants"]
else:
print "there was %d consonants"%occurrences["consonants"]
Для ввода «aef0» программа напечатает:
e, a, были вставлены 1, 1, разсоответственно был 1 согласный
Мои вопросы касаются именно этих строк.
Я знаю, что должен быть лучший способ сделать это:
for x in ocurrances:
if ocurrances[x] > 0 and x != "consonants":
print x + ",",
print "were inserted",
for x in ocurrances:
if ocurrances[x] > 0 and x != "consonants":
print str(ocurrances[x]) + ",",
print "times respectively"
Это просточувствует себя неряшливо.
Что мне не нравится в этом, так это то, что я дважды вызываю цикл, и я чувствую, что это может быть только один шаг гораздо более элегантным способом, но я не нахожуспособ сделать это.
Псевдокод (или любой другой) того, чего я пытаюсь достичь, будет следующим:
loop the dictionary
print all key with values >= 1
print "were inserted" only once
print all the respective vales.
print "times respectively"
Как я уже сказал, я хочу такой же вывод,но если выразить это более элегантно, я предполагаю, что элегантный подразумевает только один цикл, но любые другие (более элегантные) варианты приветствуются!
Я думал о том, чтобы сделать что-то вроде this , но это явно не работает.(Не беспокойтесь, это просто неправильно, но подход показывает, к чему я стремился)
Заранее спасибо!