2014-11-05 63 views
1

通常我的代碼工作正常,除了一小部分。在下面給出的文件中,程序應該輸出紅色或硬肉的安全動物的數量。它應該是8,但我得到5.我該如何解決這個問題?相關摘錄如下。謝謝。代碼沒有檢測到文件中的正確數量

的文本文件:

#color  size  flesh  class 
brown  large hard  safe 
green  large hard  safe 
red  large soft  dangerous 
green  large soft  safe 


red  small hard  safe 
red  small hard  safe 
brown  small hard  safe 
green  small soft  dangerous 
green  small hard  dangerous 
red  large hard  safe 
brown  large soft  safe 
green  small soft  dangerous 
red  small soft  safe 
red  large hard  dangerous 
red  small hard  safe 
green  small hard  dangerous 

,代碼:

for line in infile: 
    if line[0] != '#': 
     data = line.strip().split() 

     if data: 
      animals = animals + 1 

      if data[3] == 'dangerous': 
       dangerous = dangerous + 1 
      elif data[3] == 'safe' and data[1] == 'large': 
       large_safe = large_safe + 1 
      elif data[0] == 'brown' and data[3] == 'dangerous': 
       brown_dangerous = brown_dangerous + 1       
      elif (data[3] == 'safe') and (data[0] == 'red' or data[2] == 'hard'): 
       safe_red_hard = safe_red_hard + 1 



    print("Total animals: "+ animals + "\n") 
    print("Dangerous: "+ dangerous + "\n") 
    print("Brown and dangerous: "+ brown_dangerous + "\n") 
    print("Large and safe: "+ large_safe + "\n") 
    print("Safe and red color or hard flesh: "+ safe_red_hard + "\n") 

回答

1

的主要問題是與elif聲明:

elif data[3] == 'safe' and data[1] == 'large': 
    large_safe = large_safe + 1 
elif data[0] == 'brown' and data[3] == 'dangerous': 
    brown_dangerous = brown_dangerous + 1       
elif (data[3] == 'safe') and (data[0] == 'red' or data[2] == 'hard'): 

有了這個邏輯,任何動物是大而安全永遠不會被視爲安全,紅色或硬性。解決方法是使用if語句代替:

animals = 0 
large_safe = 0 
dangerous = 0 
brown_dangerous = 0 
safe_red_hard = 0 
with open('file') as infile: 
    for line in infile: 
     if line[0] == '#': 
      continue 
     data = line.strip().split() 
     if data: 
      animals = animals + 1 
      if data[3] == 'dangerous': 
       dangerous = dangerous + 1 
      if data[3] == 'safe' and data[1] == 'large': 
       large_safe = large_safe + 1 
      if data[0] == 'brown' and data[3] == 'dangerous': 
       brown_dangerous = brown_dangerous + 1________________________ 
      if (data[3] == 'safe') and (data[0] == 'red' or data[2] == 'hard'): 
       safe_red_hard = safe_red_hard + 1 

print("Total animals: "+ str(animals) +"\n") 
print("Dangerous: "+ str(dangerous) +"\n") 
print("Brown and dangerous: "+ str(brown_dangerous) + "\n") 
print("Large and safe: "+ str(large_safe) + "\n") 
print("Safe and red color or hard flesh: "+ str(safe_red_hard) + "\n")