2014-02-20 4 views
0
lines=[] 
count1 = 0 
count2 = 0 
count3 = 0 
count4 = 0 
count5 = 0 
count6 = 0 
count7 = 0 
count8 = 0 
count9 = 0 
allcount = 0 

with open('city_all.txt', 'r') as file: 
    for line in file: 
     lines.append(line.strip()) 

for x in range(0,len(lines)): 
    if lines[x].isdigit(): 
     allcount+=1 
     string = lines[x] 
     if string[0]=="1": 
      count1+=1 
     elif string[0]=="2": 
      count2+=1 
     elif string[0]=="3": 
      count3+=1 
     elif string[0]=="4": 
      count4+=1 
     elif string[0]=="5": 
      count5+=1 
     elif string[0]=="6": 
      count6+=1 
     elif string[0]=="7": 
      count7+=1 
     elif string[0]=="8": 
      count8+=1 
     elif string[0]=="9": 
      count9+=1 

print(count1/allcount) 
print('{:.1%}'.format(count1/allcount)) 

Хочет знать, если есть в любом случае не должны объявить все мои переменные и компактны все если заявление? Попытку сделать программу, чтобы помочь закону вычислителя Benfold, поэтому я ставлю в текстовый файл в список, затем через каждый элемент и проверку стартовой цифры.оптимизация моего Benfold в закон программы

+0

'отсчеты = [0 для _ в диапазоне (10)]'? И вместо 'countX = Y' использовать' counts [X] = Y'. – Hyperboreus

+0

ooo спасибо, это имеет смысл, оцените! – Brian

+0

Это также позволяет упростить, если теперь все, что вам нужно сделать, это проверить, находится ли 'string [0]' в соответствующем диапазоне, и если это так, increment 'count [string [0]]' – StephenTG

ответ

2

Вы можете упростить это немного:

counts = [0 for _ in range (10) ] 

with open('city_all.txt', 'r') as f: 
    for line in (x.strip() for x in f): 
     if line.isdigit(): 
      allcount += 1 
      try: counts[int(line)] += 1 
      except IndexError: pass 
+0

@adsmith Зачем увеличивать, если он не цифра? – StephenTG

+0

@ StephenTG Я не знаю, потому что я неправильно читал оригинальный код и думал, что это он делает;). Я удалил свой оригинальный комментарий, чтобы сохранить лицо, но я оставлю это, чтобы напомнить мне о моем позоре lol –

+0

Два комментария: 1. 'count' /' counts' typo, 2. Я думаю '[0] * 10' намного легче на глазах (и памяти), чем на понимание списка. – LucasB

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