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 15:25:35 EDT 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