Apologize for the newbie question, but I have read the manual, this question, and tried several times without results I expected.
So I was using vim to edit a file (attached). But when running, I got the TabError: inconsistent use of tabs and spaces in indentation error.
Here is what I have tried:
- Open the file with Vim. type
:retab
, and:x
. Run the file again. Still got the TabError message. - Open the file again and type
:retab!
and:x
. Run the file again. Still got the TabError message. - Open the file again and type
:retab! 4
and:x
. Run the file again. This time it works but I have no idea why? Plus, in the files indentation seems excessively long. (I read here that the editor might display 8 spaces for a tab)
My questions are:
What does
:retab
,:retab!
, and:retab! 4
mean?Why doesn't
:retab
work on my file?#!/usr/bin/env python #Reduce function for computing matrix multiply A*B #Input arguments: #variable n should be set to the inner dimension of the matrix product (i.e., the number of columns of A/rows of B) import sys import string import numpy #number of columns of A/rows of B n = int(sys.argv[1]) #Create data structures to hold the current row/column values (if needed; your code goes here) currentkey = None alist = [] # list for elelents in A blist = [] # list for elements in B # input comes from STDIN (stream data that goes to the program) for line in sys.stdin: #Remove leading and trailing whitespace line = line.strip() #Get key/value key, value = line.split('\t',1) print(key, value) #Parse key/value input (your code goes here) key = (key.split(',', 1)[0], key.split(',',1)[1]) value = (value.split(',', 1)[0], value.split(',',1)[1], value.split(',',1)[2]) #If we are still on the same key... if key==currentkey: #Process key/value pair (your code goes here) # store all values in a lisl if value[0]=='A': alist.append([value[1], value[2]]) else: blist.append([value[1], value[2]]) #Otherwise, if this is a new key... else: #If this is a new key and not the first key we've seen, i.e. currentkey!=None if currentkey: #compute/output result to STDOUT (your code goes here) alist = sorted(alist) blist = sorted(blist) newlist = [a[1]*b[1] for a,b in zip(alist, blist)] res = newlist.sum() print(currentkey, res) currentkey = key #Process input for new key (your code goes here)