How does .rjust() work and why it places characters relative to previous one, not to first character - placed most to left - or to left side of screen?

crispy ryniek90 at gmail.com
Sun Aug 19 21:25:35 CEST 2012


W dniu niedziela, 19 sierpnia 2012 19:31:30 UTC+2 użytkownik Dave Angel napisał:
> On 08/19/2012 12:25 PM, crispy wrote:
> 
> > <SNIP>
> 
> > So I have guessed, that characters processed by .rjust() function, are placed in output, relative to previous ones - NOT to first, most to left placed, character.
> 
> 
> 
> rjust() does not print to the console, it just produces a string.  So if
> 
> you want to know how it works, you need to either read about it, or
> 
> experiment with it.
> 
> 
> 
> Try   help("".rjust)     to see a simple description of it.  (If you're
> 
> not familiar with the interactive interpreter's help() function, you owe
> 
> it to yourself to learn it).
> 
> 
> 
> Playing with it:
> 
> 
> 
> print "abcd".rjust(8, "-")       produces    ----abcd
> 
> 
> 
> for i in range(5): print "a".rjust(i, "-")
> 
>     produces:
> 
> 
> 
> a
> 
> a
> 
> -a
> 
> --a
> 
> ---a
> 
> 
> 
> In each case, the number of characters produced is no larger than i.  No
> 
> consideration is made to other strings outside of the literal passed
> 
> into the method.
> 
> 
> 
> 
> 
> > Why it works like that? 
> 
> 
> 
> In your code, you have the rjust() method inside a loop, inside a join,
> 
> inside a print.  it makes a nice, impressive single line, but clearly
> 
> you don't completely understand what the pieces are, nor how they work
> 
> together.  Since the join is combining (concatenating) strings that are
> 
> each being produced by rjust(), it's the join() that's making this look
> 
> "relative" to you.
> 
> 
> 
> 
> 
> > What builtn-in function can format output, to make every character be placed as i need - relative to the first character, placed most to left side of screen.
> 
> 
> 
> If you want to randomly place characters on the screen, you either want
> 
> a curses-like package, or a gui.  i suspect that's not at all what you want.
> 
> 
> 
> if you want to randomly change characters in a pre-existing string,
> 
> which will then be printed to the console, then I could suggest an
> 
> approach (untested)
> 
> 
> 
> res = [" "] * length
> 
> for column in similarity:
> 
>     res[column] = "|"
> 
> res = "".join(res)
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> 
> 
> DaveA

Thanks, i've finally came to solution.

Here it is -> http://codepad.org/Q70eGkO8

def pairwiseScore(seqA, seqB):

    score = 0
    bars = [str(' ') for x in seqA] #create a list filled with number of spaces equal to length of seqA string. It could be also seqB, because both are meant to have same length
    length = len(seqA)
    similarity = []

    for x in xrange(length):

        if seqA[x] == seqB[x]: #check if for every index 'x', corresponding character is same in both seqA and seqB strings
            if (x >= 1) and (seqA[x - 1] == seqB[x - 1]): #if 'x' is greater than or equal to 1 and characters under the previous index, were same in both seqA and seqB strings, do..
                score += 3
                similarity.append(x)
            else:
                score += 1
                similarity.append(x)                
        else:
            score -= 1

    for x in similarity:
        bars[x] = '|' #for every index 'x' in 'bars' list, replace space with '|' (pipe/vertical bar) character 

    return ''.join((seqA, '\n', ''.join(bars), '\n', seqB, '\n', 'Score: ', str(score)))

print pairwiseScore("ATTCGT", "ATCTAT"), '\n', '\n', pairwiseScore("GATAAATCTGGTCT", "CATTCATCATGCAA"), '\n', '\n', pairwiseScore('AGCG', 'ATCG'), '\n', '\n', pairwiseScore('ATCG', 'ATCG')



More information about the Python-list mailing list