2017-04-25 111 views
1

聲明「a [i] = GEH」不會將GEH的值分配給列表。 這是爲什麼?非常感謝,如果有人能告訴我我做錯了什麼。將值分配給列表

代碼: -

import os, sys 
global rec 

def interpret_string(s): 
    if not isinstance(s, str): 
     return str(s) 
    if s.isdigit(): 
     return int(s) 
    try: 
     return float(s) 
    except ValueError: 
     return s 

f= open("turn.prn","r") 
f1=open('turn.out', 'a') 

if f.mode == 'r': 
    fl = f.readlines() 

i = 0 
a = [0.0] * 1000 
rec = [0] * 1000 

for x in fl: 
    vol = interpret_string(x[90:96]) 
    ul1 = interpret_string(x[32:40]) 
    ul2 = interpret_string(x[41:49]) 

    if vol != str(x[90:96]): 
     if vol > 0 and ul1 > 0: 
      Diff = (((ul1 - vol)/ul1) ** 2) ** 0.5 
      GEH = (((2 * (ul1-vol)**2))/(ul1+vol))**0.5 
      if GEH > 0.0 : 
       a[i]=GEH 
       rec[i] = i 
       i=i+1 
       print(i,a[i],rec[i],GEH) 
f.close() 
f1.close() 

問候

Razif

+0

你怎麼知道它沒有被分配?您一直在使用哪個調試器來遍歷代碼? – lit

回答

0

如果甲肝沒有現在測試它的posibility,但因爲你似乎想擁有包括「無」的名單值如果不匹配和「GEH」如果匹配我會使用「其他」 - 聲明和追加無。

import os, sys 
global rec 

def interpret_string(s): 
    if not isinstance(s, str): 
     return str(s) 
    if s.isdigit(): 
     return int(s) 
    try: 
     return float(s) 
    except ValueError: 
     return s 

f= open("turn.prn","r") 
f1=open('turn.out', 'a') 

if f.mode == 'r': 
    fl = f.readlines() 

i = 0 
a = [0.0] * 1000 
rec = [0] * 1000 

for x in fl: 
    vol = interpret_string(x[90:96]) 
    ul1 = interpret_string(x[32:40]) 
    ul2 = interpret_string(x[41:49]) 

    if vol != str(x[90:96]): 
     if vol > 0 and ul1 > 0: 
      prin = false # This will trigger the print only if the if- 
         # condition is met 
      Diff = (((ul1 - vol)/ul1) ** 2) ** 0.5 
      GEH = (((2 * (ul1-vol)**2))/(ul1+vol))**0.5 
      if GEH > 0.0 : 
       a.append(GEH) 
       prin = true 
      else : 
       a.append(None) 
      rec[i] = i 
      i=i+1 
      if prin : 
       print(i,a[i],rec[i],GEH) 
f.close() 
f1.close() 

對不起,雜亂的打印「如果」 - 這是我能想出的最簡單的方法;)。 正如我所說,我無法測試,但我認爲這可以工作。