RESULTS: Complementary PEP308 Ternary Vote
IMPORTANT NOTE: The results shown below are for the complementary, UNOFFICIAL vote on the issue of adding a ternary operator to Python (PEP308). These results will probably be a bit different from the OFFICIAL results, which are being tabulated by Raymond Hettinger using a different technique and a different set of ballots. Both sets of results are non-binding, and intended only to advise the BDFL about the Python community's wishes regarding the implementation of PEP308. Hopefully, this supplemental vote will provide Guido van Rossum with additional insight into the wishes of Python users. See: http://mail.python.org/pipermail/python-list/2003-March/151680.html for additional information about this vote. This COMPLEMENTARY vote used a ranked ballot and Condorcet's method to determine a winner. For background information about how this method works, see: http://www.electionmethods.org/CondorcetEx.htm The results shown below are based on 101 ballots received over a one week period (March 3-9). The ballots themselves may be viewed here: http://mail.python.org/pipermail/python-list/2003-March/152304.html VOTING SOFTWARE =============== GNU GPL-licensed voting software written in Python is available to verify these results. It could also be used again in future votes if the Python community wishes to use Condorcet's method to advise the BDFL on other PEPs. You can download a package containing this software as well as all the data used for this vote from: http://24.72.22.210/pepvote.tar.gz This software was written and tested using Python 2.2 running on Red Hat Linux 8.0. Use on other platforms may require some adaptation. SINGLE WINNER ============= The Condorcet Winner is: "NO TERNARY". SOCIAL RANKING (Tideman) ======================== 1. NO TERNARY 2. if C then t else f 3. (if C: t else: f) 4. C ? t : f 5. if C: t else: f 6. t if C else f 7. C then t else f 8. t when C else f 9. C ? t ! f 10. C ?? t || f 11. C ? t else f 12. when C: t else f 13. C -> t else f 14. case C: t else f 15. ifelse C: t else f 16. select C: t else f 17. cond(C, t, f) 18. C -> (t, f) 19. C and t else f 20. <if C then t else f> 21. [t if C else f] Kemeny Score: 9681 PAIRWISE COMPARISONS ==================== Option "NO TERNARY": beats option "if C then t else f" [50 - 43] beats option "(if C: t else: f)" [50 - 45] beats option "C ? t : f" [54 - 41] beats option "if C: t else: f" [55 - 38] beats option "t if C else f" [56 - 36] beats option "C then t else f" [64 - 29] beats option "t when C else f" [67 - 25] beats option "C ? t ! f" [70 - 23] beats option "C ?? t || f" [70 - 23] beats option "C ? t else f" [69 - 23] beats option "when C: t else f" [73 - 17] beats option "C -> t else f" [75 - 17] beats option "case C: t else f" [74 - 15] beats option "ifelse C: t else f" [76 - 13] beats option "select C: t else f" [75 - 14] beats option "cond(C, t, f)" [74 - 19] beats option "C -> (t, f)" [76 - 15] beats option "C and t else f" [73 - 17] beats option "<if C then t else f>" [78 - 13] beats option "[t if C else f]" [80 - 12] Option "if C then t else f": beats option "(if C: t else: f)" [38 - 37] beats option "C ? t : f" [41 - 36] beats option "if C: t else: f" [45 - 32] beats option "t if C else f" [43 - 31] beats option "C then t else f" [51 - 15] beats option "t when C else f" [54 - 19] beats option "C ? t ! f" [52 - 20] beats option "C ?? t || f" [51 - 21] beats option "C ? t else f" [55 - 13] beats option "when C: t else f" [61 - 9] beats option "C -> t else f" [62 - 7] beats option "case C: t else f" [63 - 5] beats option "ifelse C: t else f" [63 - 4] beats option "select C: t else f" [63 - 6] beats option "cond(C, t, f)" [62 - 10] beats option "C -> (t, f)" [63 - 6] beats option "C and t else f" [61 - 8] beats option "<if C then t else f>" [60 - 7] beats option "[t if C else f]" [62 - 9] Option "(if C: t else: f)": beats option "C ? t : f" [47 - 33] beats option "if C: t else: f" [44 - 26] beats option "t if C else f" [47 - 32] beats option "C then t else f" [52 - 23] beats option "t when C else f" [55 - 21] beats option "C ? t ! f" [60 - 13] beats option "C ?? t || f" [59 - 14] beats option "C ? t else f" [62 - 8] beats option "when C: t else f" [63 - 7] beats option "C -> t else f" [62 - 7] beats option "case C: t else f" [66 - 1] beats option "ifelse C: t else f" [67 - 1] beats option "select C: t else f" [66 - 2] beats option "cond(C, t, f)" [65 - 8] beats option "C -> (t, f)" [62 - 8] beats option "C and t else f" [63 - 7] beats option "<if C then t else f>" [64 - 1] beats option "[t if C else f]" [64 - 6] Option "C ? t : f": beats option "if C: t else: f" [40 - 37] beats option "t if C else f" [43 - 37] beats option "C then t else f" [44 - 32] beats option "t when C else f" [49 - 28] beats option "C ? t ! f" [54 - 5] beats option "C ?? t || f" [53 - 7] beats option "C ? t else f" [55 - 10] beats option "when C: t else f" [57 - 13] beats option "C -> t else f" [54 - 10] beats option "case C: t else f" [59 - 12] beats option "ifelse C: t else f" [59 - 8] beats option "select C: t else f" [59 - 11] beats option "cond(C, t, f)" [56 - 15] beats option "C -> (t, f)" [56 - 6] beats option "C and t else f" [53 - 14] beats option "<if C then t else f>" [57 - 11] beats option "[t if C else f]" [60 - 10] Option "if C: t else: f": beats option "t if C else f" [47 - 34] beats option "C then t else f" [53 - 27] beats option "t when C else f" [56 - 23] beats option "C ? t ! f" [56 - 15] beats option "C ?? t || f" [55 - 16] beats option "C ? t else f" [57 - 13] beats option "when C: t else f" [59 - 11] beats option "C -> t else f" [59 - 9] beats option "case C: t else f" [63 - 6] beats option "ifelse C: t else f" [64 - 5] beats option "select C: t else f" [62 - 7] beats option "cond(C, t, f)" [59 - 11] beats option "C -> (t, f)" [61 - 9] beats option "C and t else f" [62 - 8] beats option "<if C then t else f>" [59 - 7] beats option "[t if C else f]" [60 - 11] Option "t if C else f": beats option "C then t else f" [39 - 33] beats option "t when C else f" [52 - 9] beats option "C ? t ! f" [45 - 29] beats option "C ?? t || f" [44 - 31] beats option "C ? t else f" [46 - 26] beats option "when C: t else f" [45 - 24] beats option "C -> t else f" [50 - 20] beats option "case C: t else f" [46 - 22] beats option "ifelse C: t else f" [49 - 18] beats option "select C: t else f" [49 - 19] beats option "cond(C, t, f)" [54 - 17] beats option "C -> (t, f)" [50 - 22] beats option "C and t else f" [48 - 19] beats option "<if C then t else f>" [48 - 23] beats option "[t if C else f]" [54 - 8] Option "C then t else f": beats option "t when C else f" [41 - 21] beats option "C ? t ! f" [42 - 24] beats option "C ?? t || f" [40 - 25] beats option "C ? t else f" [42 - 21] beats option "when C: t else f" [48 - 15] beats option "C -> t else f" [52 - 11] beats option "case C: t else f" [50 - 11] beats option "ifelse C: t else f" [55 - 5] beats option "select C: t else f" [52 - 9] beats option "cond(C, t, f)" [47 - 19] beats option "C -> (t, f)" [55 - 11] beats option "C and t else f" [52 - 7] beats option "<if C then t else f>" [52 - 14] beats option "[t if C else f]" [54 - 10] Option "t when C else f": beats option "C ? t ! f" [34 - 32] beats option "C ?? t || f" [34 - 30] beats option "C ? t else f" [36 - 29] beats option "when C: t else f" [31 - 27] beats option "C -> t else f" [39 - 22] beats option "case C: t else f" [31 - 27] beats option "ifelse C: t else f" [39 - 20] beats option "select C: t else f" [36 - 23] beats option "cond(C, t, f)" [42 - 23] beats option "C -> (t, f)" [40 - 24] beats option "C and t else f" [35 - 23] beats option "<if C then t else f>" [38 - 25] beats option "[t if C else f]" [43 - 12] Option "C ? t ! f": beats option "C ?? t || f" [29 - 18] beats option "C ? t else f" [31 - 19] beats option "when C: t else f" [34 - 24] beats option "C -> t else f" [34 - 13] beats option "case C: t else f" [40 - 19] beats option "ifelse C: t else f" [40 - 13] beats option "select C: t else f" [40 - 16] beats option "cond(C, t, f)" [37 - 20] beats option "C -> (t, f)" [37 - 15] beats option "C and t else f" [40 - 18] beats option "<if C then t else f>" [36 - 16] beats option "[t if C else f]" [44 - 11] Option "C ?? t || f": beats option "C ? t else f" [29 - 22] beats option "when C: t else f" [34 - 23] beats option "C -> t else f" [35 - 14] beats option "case C: t else f" [38 - 18] beats option "ifelse C: t else f" [41 - 13] beats option "select C: t else f" [38 - 17] beats option "cond(C, t, f)" [36 - 21] beats option "C -> (t, f)" [36 - 13] beats option "C and t else f" [34 - 20] beats option "<if C then t else f>" [35 - 18] beats option "[t if C else f]" [42 - 12] Option "C ? t else f": beats option "when C: t else f" [31 - 25] beats option "C -> t else f" [33 - 11] beats option "case C: t else f" [39 - 17] beats option "ifelse C: t else f" [41 - 11] beats option "select C: t else f" [39 - 15] beats option "cond(C, t, f)" [36 - 20] beats option "C -> (t, f)" [39 - 12] beats option "C and t else f" [37 - 18] beats option "<if C then t else f>" [38 - 15] beats option "[t if C else f]" [41 - 13] Option "when C: t else f": beats option "C -> t else f" [28 - 21] beats option "case C: t else f" [33 - 5] beats option "ifelse C: t else f" [28 - 12] beats option "select C: t else f" [28 - 11] beats option "cond(C, t, f)" [33 - 20] beats option "C -> (t, f)" [31 - 23] beats option "C and t else f" [32 - 18] beats option "<if C then t else f>" [33 - 18] beats option "[t if C else f]" [35 - 16] Option "C -> t else f": beats option "case C: t else f" [28 - 23] beats option "ifelse C: t else f" [28 - 17] beats option "select C: t else f" [28 - 20] loses to option "cond(C, t, f)" [24 - 27] beats option "C -> (t, f)" [32 - 10] beats option "C and t else f" [31 - 20] beats option "<if C then t else f>" [27 - 20] beats option "[t if C else f]" [32 - 17] Option "case C: t else f": ties option "ifelse C: t else f" [18 - 18] ties option "select C: t else f" [16 - 16] beats option "cond(C, t, f)" [30 - 24] beats option "C -> (t, f)" [28 - 25] beats option "C and t else f" [29 - 18] beats option "<if C then t else f>" [32 - 18] beats option "[t if C else f]" [34 - 15] Option "ifelse C: t else f": beats option "select C: t else f" [22 - 11] ties option "cond(C, t, f)" [26 - 26] loses to option "C -> (t, f)" [23 - 25] beats option "C and t else f" [24 - 22] beats option "<if C then t else f>" [27 - 20] beats option "[t if C else f]" [29 - 17] Option "select C: t else f": beats option "cond(C, t, f)" [28 - 24] beats option "C -> (t, f)" [26 - 25] beats option "C and t else f" [26 - 20] beats option "<if C then t else f>" [30 - 18] beats option "[t if C else f]" [30 - 16] Option "cond(C, t, f)": beats option "C -> (t, f)" [28 - 24] beats option "C and t else f" [30 - 26] beats option "<if C then t else f>" [28 - 25] beats option "[t if C else f]" [29 - 24] Option "C -> (t, f)": beats option "C and t else f" [27 - 24] beats option "<if C then t else f>" [26 - 23] beats option "[t if C else f]" [33 - 17] Option "C and t else f": beats option "<if C then t else f>" [26 - 25] beats option "[t if C else f]" [29 - 20] Option "<if C then t else f>": beats option "[t if C else f]" [26 - 17] -- Norman Petry
participants (1)
-
Norman Petry