返回顶部

我正在尝试在 3.x 中复制(并在可能的情况下改进)Python 2.x 的排序行为,以便像int,float等相互可排序的类型按预期排序,并且相互不可排序的类型在输出中分组。 这是我正在谈论的一个例子: >>> sorted([0, 'one', 2.3, 'four', -5]) # Python 2.x [-5, 0, 2.3, 'four', 'one'] >>> sorted([0, 'one', 2.3, 'four', -5]) # Python 3.x Traceback (most recent call last): File "", line 1, in TypeError: unorderable types: str() < int() 我之前在这方面的尝试,使用一个类作为关键参数sorted()(请参阅 为什么这个用于排序异构序列的关键类表现奇怪?)从根本上被打破了,因为它的方法是 尝试比较值,以及 如果失败,回退到比较它们类型的字符串表示 可以导致不及物顺序,正如BrenBarn 的优秀回答所解释的那样。 一个天真的方法,我最初拒绝甚至没有尝试编码它,将使用一个返回(type, value)元组的关键函数: def motley(value): return repr(type(value)), value 但是,这不是我想要的。首先,它打破了相互可排序类型的自然排序: >>> sorted([0, 123.4, 5, -6, 7.89]) [-6, 0, 5, 7.89, 123.4] >>> sorted([0, 123.4, 5, -6, 7.89], key=motley) [7.89, 123.4, -6, 0, 5] 其次,当输入包含两个本质上无序类型相同的对象时,它会引发异常: >>> sorted([{1:2}, {3:4}], key=motley) Traceback (most recent call last): File "", line 1, in TypeError: unorderable types: dict() < dict() ...诚然,这是 Python 2.x 和 3.x 中的标准行为——但理想

大家好,我正在尝试用 Python 编写一个充当问答游戏的程序。我在程序开始时制作了一个字典,其中包含用户将被测验的值。它的设置如下: PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"} 所以我定义了一个函数,它使用for循环遍历字典键并要求用户输入,并将用户输入与与键匹配的值进行比较。 for key in PIX0: NUM = input("What is the Resolution of %s?" % key) if NUM == PIX0[key]: print ("Nice Job!") count = count + 1 else: print("I'm sorry but thats wrong. The correct answer was: %s." % PIX0[key] ) 这是工作正常输出看起来像这样: What is the Resolution of Full HD? 1920x1080 Nice Job! What is the Resolution of VGA? 640x480 Nice Job! 所以我希望能够做的是有一个单独的功能,以另一种方式提出问题,为用户提供分辨率编号并让用户输入显示标准的名称。所以我想做一个 for 循环,但我真的不知道如何(或者如果你甚至可以)迭代字典中的值并要求用户输入键。 我想要输出看起来像这样: Which standard has a resolution of 1920x1080? Full HD Nice Job! What standard has a resolution of 640x480? VGA Nice Job! 我试过玩,for value in PIX0.values()这允许我遍历字典值,但我不知道如何使用它来“检查”用户对字典键的答案。如果有人可以提供帮助,将不胜感激。 编辑:对不起,我正在使用 Python3。

正在加载...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152