Reminder re: Complementary Vote on PEP Three-Zero-Eight

Norman Petry
07 Mar 2003 18:17:19 -0600

This message is to remind you that TOMORROW (Saturday) is the last day
to vote in the complementary, UNOFFICIAL vote on adding a ternary
operator to Python (PEP-308).  Response has been good so far, but the
more people that participate, the more useful the results will be. 
Please participate if you have the time.

A copy of the ballot, and instructions on how to vote are included
below, in case you missed the first announcement.

More information about this additional vote, and why it was organized
will be found here:



This is NOT a ballot for the "official" PEP-308 vote being run by
Raymond Hettinger.  It is for a different vote that is intended to
COMPLEMENT the results of the official vote, by using a different type
of ballot, and a different method of tallying the results (Condorcet's
Method), for those who may be interested.  If enough people choose to
participate, it will provide a high-quality source of additional
information about the preferences of the Python community regarding the
ternary operator.

This vote is NOT intended to compete with, or substitute for the
official vote.  Please participate in both votes if you have the time,
but BE SURE to vote in the official one if you care about the outcome of
PEP-308.  See the explanations in my posting to comp.lang.python two
days ago for more information about the reasons for this supplemental
vote on PEP-308 ("ANNOUNCE: Complementary VOTE re: PEP 308 Ternary
Proposal", Sun, 02 Mar 2003 17:44:33 -0600).


The two-day nomination period for additional syntax proposals has now
ENDED.  No additional nominations were received, so the ballot is as


XX  t if C else f
XX  if C then t else f
XX  (if C: t else: f)
XX  if C: t else: f
XX  C ? t : f
XX  C ? t ! f
XX  cond(C, t, f)  
XX  C ?? t || f
XX  C then t else f
XX  t when C else f
XX  C ? t else f
XX  C -> t else f
XX  C -> (t, f)
XX  [t if C else f]
XX  ifelse C: t else f 
XX  select C: t else f 
XX  when C: t else f   
XX  case C: t else f   
XX  <if C then t else f>
XX  C and t else f


Voting is a simple matter of RANKING the alternatives of interest by
replacing the 'XX' that precedes each option with a 2-digit number.  For
example, you would use '01' for your FAVOURITE (highest-ranked) option,
and greater numbers (02, 03,...) for lower-ranked alternatives.

You may RE-ORDER the options on the ballot.  It is often easier when
there are many options to reorder them manually from best to worst, and
then assign rankings.  Note though, that you must STILL assign a rank
number to each option, since it is always the NUMBER that determines the
rank, not the ordering.

You may assign the SAME RANK to multiple options if you consider them to
be equally good/bad.  Doing this is equivalent to abstaining from
participation in any decision between these equally-ranked alternatives.

To simplify voting, you may TRUNCATE your ballot by leaving certain
options UNRANKED (for any options you consider to be so bad and
unwinnable as to not be worth considering).  If you wish to do this,
a) leave 'XX' in front of the unwanted option(s) in your submitted
ballot, rather than replacing it with a rank number, or
b) delete the line(s) of the ballot that contain the unwanted options.
You can also use a combination of both methods.  In either case, these
truncated options will be interpreted the same as if they had been
ranked EQUALLY, and LOWER than all explicitly ranked alternatives.  

While truncation and equal rankings provide convenience, ranking many
options (even those you dislike) is a good idea.  See the STRATEGY TIPS
section (below) for reasons why.

Note that the status quo option of "NO TERNARY" simply appears as one of
the available options, and every other proposed syntax appears as a
separate option on the ballot.  By placing "NO TERNARY" somewhere within
the middle of your ranking, you can express the desire to have a ternary
operator added to Python only if certain forms of syntax are used, and
reject alternatives that you dislike (while still expressing preferences
among these bad alternatives, in case one or more of them proves to be
winnable).  The status quo option can of course also be ranked first or
last, if you feel either that (a) no ternary is acceptable in any form,
or alternately, (b) should be added to the language at any cost.  

A sample completed ballot might look like:

02  (if C: t else: f)
01  t if C else f
XX  if C then t else f
03  if C: t else: f

Here, the voter's favourite option is "t if C else f".  The 4th option
is unranked, and could have instead been deleted to indicate the same
thing.  Surrounding lines of hyphens marking the beginning and end of
the ballot are appreciated for clarity, but not required.


You may vote by submitting your email ballot to:


Your final vote must be received within 96 HOURS (4 days, approx.
Wed-Sat) of the time this message first appears on comp.lang.python
and/or comp.lang.python.announce for it to be counted in the final

A CONFIRMATION message will be returned for each ballot that is
received, identifying any problems.  Unconfirmed ballots will not appear
in the results, so if you don't receive a reply within a few hours, you
may wish to send your ballot again (I'm confirming votes manually, so
the response will not be immediate).  

If you decide to CHANGE YOUR VOTE, just send a revised ballot containing
your new preferences.  The last confirmed ballot for each email address
will be the one that appears in the final results.


Results will be published on Sunday, March 9th, but NOT before the
voting period of the "official" vote has ended (Noon, EST).  Published
results will be sent to comp.lang.python and comp.lang.python.announce.

Results will include (among other things) a list containing each voter's
NAME, EMAIL ADDRESS (munged), and COMPLETED BALLOT to allow for
independent verification.  Therefore, if you do not want any or all of
this information about you made public, DO NOT VOTE!  Please refer to
the previous message announcing this vote for details about what types
of information will appear in the results.


You may be unfamiliar with CONDORCET'S METHOD, the system of voting used
here (unless you happen to be a member of the Debian Project :-). 
Although completing a ranked ballot is technically very easy, if you
wish to know how to maximise the chances of getting the outcome you
want, you should read following information before completing your


1. Condorcet's method of counting ranked ballots is very different from
other systems (STV/AV/IRV, Borda, etc.) that also use a ranked ballot. 
Therefore, it is a bad idea to attempt to vote strategically based on
what you know (or think you know) about how those systems work.  The
best strategies for one method of voting will usually fail very badly
when applied in another, even if the form of the ballot is similar.

2. You should NOT assume that ranking any UNACCEPTABLE options will harm
the chances of electing your PREFERRED option(s).  Condorcet's method is
a system of pairwise voting, where the overall result is determined by
finding the majority winners of a series of two-way races between every
possible pair of alternatives.  Not ranking (truncating) some options,
or assigning the same rank to a group of options is therefore equivalent
to ABSTAINING from participation in any decision between those
equally-ranked alternatives.  Therefore, if the final choice in the
election is between two options, both of which you dislike -- but not
EQUALLY -- you may later regret not having participated in that

3. You should also NOT vote for what you believe to be an acceptable,
popular choice (the "lesser evil" compromise) ahead of your true
favourite(s), in the belief that this will somehow help to prevent the
election of a popular, disliked alternative (the "greater evil").  This
type of strategy is often necessary in plurality ("first-past-the-post")
voting, but is ineffective and unnecessary with Condorcet's method. 
Condorcet's method finds the best compromise automatically, if one is
needed, so doing this will simply harm the chances of electing your true
favourite.  See for a
detailed explanation of this.

With CONDORCET'S METHOD, you will maximise the power and effectiveness
of your ballot by providing a COMPLETE and SINCERE expression of your
true preferences.  You should only rank options equally if you genuinely
consider them to be equally good (or bad).

Norman Petry