Wayne Werner wrote:

In this case it's not actually modulus, it's just the syntax for string
formatting. I'm not sure *what* the reasoning behind the % was, but that's
the way it is.

I believe the designers of the C programming language are to blame.

[...]
In old style formatting, you use a string with format specifiers (%s, %d,
etc.) followed by a tuple of arguments. Here, the lengths have to match
exactly - if you have one specifier then you must have a 1-element tuple.

That's actually wrong. If you have one specifier, you must have one object of any sort *except* a tuple.

>>> "%s" % 42  # One object not a tuple.
'42'

But if you have a tuple, the % formatting will try to use each element in the tuple separately:

>>> "%s" % (23, 42)  # One object which is a tuple
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting


So if you actually want to use a tuple as the object, you need to wrap it in a single item tuple:

>>> "%s" % ((23, 42),)  # Tuple inside a tuple.
'(23, 42)'


--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to