n00bie wants advice.

B

bsagert

This simple script writes html color codes that can be viewed in a
browser. I used short form hex codes (fff or 000, etc) and my list
has only six hex numbers otherwise the results get rather large. I
invite criticism as to whether my code is "pythonic". Are there other
ways to generate the hex combos besides the nested "for" loops? Thanks
in advance, Bill

list = ['3','6','9','b','d','f']

s = '<html><head><style>h1{margin:0}</style></head><body>\n'

for a in list:
for b in list:
for c in list:
s += '<h1 style="background:#'+ a + b + c +'">'+ a + b + c +'</h1>
\n'

s += '</body></html>'

f = open('c:/x/test.htm', 'w')
f.write(s)
f.close()
 
M

Marc 'BlackJack' Rintsch

This simple script writes html color codes that can be viewed in a
browser. I used short form hex codes (fff or 000, etc) and my list
has only six hex numbers otherwise the results get rather large. I
invite criticism as to whether my code is "pythonic".

You should not rebind the name `list` because it shadows the built in type
of that name then. A more descriptive name would be nice anyway, i.e.
`hex_digits`. And strings are iterable too, so it's a bit shorter and
easier to type the digits a string.

Repeatedly concatenating strings with ``+=`` might be performance problem.
Python strings are immutable so this operation has to copy the involved
and growing strings over and over again. Although the current CPython
implementation can optimize here in some cases, the usual idiom is to use
the `join()` method of strings to build a string from components in a list
or iterable.

Alternative implementation of your script:

from __future__ import with_statement

def main():
html_template = ('<html><head><style>h1{margin:0}</style></head><body>\n'
'%s\n'
'</body></html>\n')
header_template = '<h1 style="background:#%s">%s</h1>'
hex_digits = '369bdf'
colors = (a + b + c for a in hex_digits
for b in hex_digits
for c in hex_digits)
html = html_template % '\n'.join(header_template % (c, c) for c in colors)
with open('test.html', 'w') as html_file:
html_file.write(html)

if __name__ == '__main__':
main()
 
O

oj

This simple script writes html color codes that can be viewed in a
browser.  I used short form hex codes (fff or 000, etc) and my list
has only six hex numbers otherwise the results get rather large. I
invite criticism as to whether my code is "pythonic". Are there other
ways to generate the hex combos besides the nested "for" loops? Thanks
in advance, Bill

list = ['3','6','9','b','d','f']

s = '<html><head><style>h1{margin:0}</style></head><body>\n'

for a in list:
        for b in list:
                for c in list:
                        s += '<h1 style="background:#'+ a + b + c +'">'+ a + b + c +'</h1>
\n'

s += '</body></html>'

f = open('c:/x/test.htm', 'w')
f.write(s)
f.close()

You could write the loop like this:

for red, green, blue in [(r, g, b) for r in list for g in list for b
in list]:
s += blah blah blah

but, arguably, that isn't easier to read or understand. It's a matter
of taste, I guess.

As has already been mentioned, list is not a good name, because it is
already used.

Also, personally, I find it easier to read strings that aren't
constructed with concatenation, but using pythons string formatting
gubbins:

'<h1 style="background: #%s%s%s">' % (red, green, blue)

Again, I think this is mostly personal preference.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top