2016-11-17 32 views
1
def process_body(infile, outfile, modification): 
    ''' 
    changing the numbers to the outfile    
    ''' 


for line in infile.readline(): 
    line = line.strip() 
    input() 
    num = "" 
    for char in line: 
     if modification == "negate": 
      if char != " ": 
       #concatenate "digits" 
       num += char 
      else: 
       #convert already concatenated "digits" 
       negate_line = negate(num) 
       print(negate_line) 
       #clear for next number 
       num = "" 

這裏是我的否定功能在文件更改數字,不能使用.split

def negate(num): 
    ''' 
    absolute value of RGB value - 255 
    ''' 

    num = int(num) 
    negate_line = abs(num - 255) 
    negate_line_out = str(negate_line) 
    return negate_line_out 

這是代碼應在數從文件中讀取和減去255,並打印到outfile中。我不允許使用split。下面是從infile中

0 44 89 0 44 89 0 44 89 0 44 89 1 45 90 
1 45 90 1 45 90 1 45 90 1 45 92 1 45 92 
1 55 101 0 54 100 0 54 100 0 53 99 0 53 99 
0 54 101 0 54 101 0 54 101 0 54 101 0 54 101 
0 54 101 0 54 101 0 54 101 0 53 103 0 53 103 

現在我的錯誤是 這些都是我被退回

255 251 246 255 251 246 255 251 246 255 251 246 254 250 

但這些數字的號碼,我需要

255 211 166 255 211 166 255 211 166 255 211 166 254 210 165 

是一些代碼數字處理不正確的原因是什麼?

+0

我看到這個數字昨天 - 已經有人問這個問題。 – furas

+0

錯誤表示您嘗試將空格'「」轉換爲整數。但是在代碼中看不到int()。 – furas

+0

是的,它可能是我,仍然試圖使它工作,這是最新的代碼。但其他線程死亡 –

回答

1

你必須保持(連鎖)數字/數字不同的變量比char和使用negate這個變量時char" "

data = '''0 44 89 0 44 89 0 44 89 0 44 89 1 45 90 
1 45 90 1 45 90 1 45 90 1 45 92 1 45 92 
1 55 101 0 54 100 0 54 100 0 53 99 0 53 99 
0 54 101 0 54 101 0 54 101 0 54 101 0 54 101 
0 54 101 0 54 101 0 54 101 0 53 103 0 53 103 ''' 

modification = "negate" 

#for line in infile: 
for line in data.split('\n'): 
    line = line.strip() 

    # to keep concatenated "digits" 
    num = '' 

    for char in line: 
     if char != " ": 
      # concatenate "digits" 
      num += char 
     else: 
      if modification == "negate": 
       # convert already concatenated "digits" 
       negate_line = negate(num) 
       print(negate_line, end=" ") 
       # clear for next number 
       num = '' 

    # last number - because there is no " " after this number 
    if num: 
     if modification == "negate": 
      negate_line = negate(num) 
      print(negate_line, end=' ') 
      # clear for next number 
      num = '' 

    print() 

def negate(num): 
    num = int(num) 
    negate_line = abs(num - 255) 
    negate_line_out = str(negate_line) 
    return negate_line_out 
+0

當我使用你的代碼時,我的輸出只是空格。 –

+0

你確實使用mu代碼還是與你的其他代碼?我的代碼使用字符串中的數據,而不是來自文件。你必須改變'for'行。 – furas

+0

我覺得你的代碼是正確的答案,我不知道爲什麼我的輸出只是空格。 –

1

不能使用分裂?沒問題!自己寫的分裂:

import itertools 

def splitNums(line, delim=' '): 
    answer = [] 
    for k,group in itertools.groupby(line, lambda x: x==delim): 
     if k: continue 
     g = ''.join(group).strip() 
     if not g.strip(): continue 
     answer.append(int(g)) 

    return answer 


def negateNumber(n): 
    return abs(n-255) 

def negateFile(infilepath, outfilepath): 
    with open(infilepath) as infile, open(outfilepath, 'w') as outfile: 
     for line in infile: 
      nums = splitNums(line) 
      negs = [negateNumber(n) for n in nums] 
      outfile.write(' '.join([str(i) for i in negs])) 
      outfile.write('\n') 

與您輸入的文件,我得到這個輸出文件:

255 211 166 255 211 166 255 211 166 255 211 166 254 210 165 
254 210 165 254 210 165 254 210 165 254 210 163 254 210 163 
254 200 154 255 201 155 255 201 155 255 202 156 255 202 156 
255 201 154 255 201 154 255 201 154 255 201 154 255 201 154 
255 201 154 255 201 154 255 201 154 255 202 152 255 202 152