1

我需要帮助来理解这个问题。请不要发布答案,只发布解决方法。

赋值10给变量base。将集合分配{0,1,2,3,4,5,6,7,8,9} 给变量digits。现在使用推导式编写一个表达式basedigits其值是所有最多三位数字的集合。您的表达式应该适用于任何基础。例如,如果您改为分配2给基数并分配{0,1}给数字,则表达式的值应该是{0,1,2,3,4,5,6,7},因为这是以 2 为基数,最多具有三位数字的数字集。

我尝试了这个表达式,但我无法解决 base 2 问题。

base = 10
digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{(x*(base**2))+(y*(base**1))+(z*(base**0)) for x in digits for y in digits for z in digits if (x*(base**2))+(y*(base**1))+(z*(base**0))>((y*(base**1))+(z*(base**0)))}
4

3 回答 3

2

...其值是所有最多三位数字的集合。

重点补充。您需要包含值000- 099(for base = 10)。

看起来你几乎得到了它。您的理解中不需要过滤器。想想你会从for x in digits for y in digits for z in digits不同的值中得到多少结果digits。它应该是正确数量的值。

于 2013-07-08T20:26:48.413 回答
1

您已经有了答案,只需删除该if声明即可。尝试这个:

{x*base**2+y*base**1+z*base**0 for x in digits for y in digits for z in digits}

如果你使用基数 10 和数字 (0,1,2,3,4,5,6,7,8,9) 你应该得到一个从 0 到 999 的列表。如果你使用基数 2 和数字 (0, 1) 你应该得到一个从 0 到 7 的列表。

于 2013-07-15T18:42:03.777 回答
1

我猜你的作业已经完成,差不多两年后:

您的基地内的 3 位数字的数量是形式的序列

base^digits

例如,要获得以 10 为底的 3 位数字的数量,可以在 python 中键入:

10**3

然后,您可以使用 range 函数来拥有它们:

{x for x in range(10**3)}

这适用于任何基础。

于 2015-05-12T07:06:38.507 回答