小编Zer*_*eus的帖子

"while 1"和"while True"之间有什么区别?

我已经看到了两种在Python中创建无限循环的方法:

  1. while 1:
        do_something()
    
    Run Code Online (Sandbox Code Playgroud)
  2. while True:
        do_something()
    
    Run Code Online (Sandbox Code Playgroud)

这些之间有什么区别吗?比另一个更pythonic?

python infinite-loop while-loop

23
推荐指数
3
解决办法
3万
查看次数

Python递归函数错误:"超出最大递归深度"

我使用以下代码解决了Euler项目的问题10,该代码通过强力实施:

def isPrime(n):

    for x in range(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True


def primeList(n):

    primes = []

    for i in range(2,n):
        if isPrime(i):
            primes.append(i)

    return primes


def sumPrimes(primelist):
    prime_sum = sum(primelist)
    return prime_sum


print (sumPrimes(primeList(2000000)))
Run Code Online (Sandbox Code Playgroud)

这三个功能的工作原理如下:

  1. isPrime检查一个数字是否是素数;
  2. primeList返回一个列表,其中包含一组限制为"n"的特定范围的素数,并且;
  3. sumPrimes总结列表中所有数字的值.(不需要最后一个功能,但我喜欢它的清晰度,特别是像我这样的初学者.)

然后我编写了一个新函数primeListRec,它与primeList完全相同,以帮助我更好地理解递归:

def primeListRec(i, n):
    primes = []
    #print i


    if (i != n):
        primes.extend(primeListRec(i+1,n))

    if (isPrime(i)):
        primes.append(i)
        return primes


    return primes
Run Code Online (Sandbox Code Playgroud)

上面的递归函数有效,但仅适用于非常小的值,如'500'.当我输入'1000'时,该功能导致我的程序崩溃.当我输入类似'2000'的值时,Python给了我这个:

RuntimeError:超出最大递归深度.

我的递归函数出了什么问题?或者是否有一些特定的方法来避免递归限制?

python recursion

22
推荐指数
1
解决办法
7万
查看次数

功能范式中的动态编程

我正在寻找关于项目欧拉的问题三十一,请问,有多少不同的方法可以使用任意数量的1p,2p,5p,10p,20p,50p,£1(100p)和£的硬币赚2英镑2(200p).

有递归解决方案,例如Scala中的这个解决方案(由Pavel Fatin提供)

def f(ms: List[Int], n: Int): Int = ms match {
  case h :: t =>
    if (h > n) 0 else if (n == h) 1 else f(ms, n - h) + f(t, n)
  case _ => 0
} 
val r = f(List(1, 2, 5, 10, 20, 50, 100, 200), 200)
Run Code Online (Sandbox Code Playgroud)

虽然运行速度足够快,但它的效率相对较低,调用f函数大约560万次.

我看到了其他用Java编写的动态编程解决方案(来自葡萄牙的wizeman)

final static int TOTAL = 200;

public static void main(String[] args) {
    int[] coins = {1, 2, 5, 10, 20, …
Run Code Online (Sandbox Code Playgroud)

java functional-programming scala dynamic-programming

22
推荐指数
5
解决办法
5307
查看次数

在R中为什么阶乘(100)与prod(1:100)显示不同?

在RI我发现了一些我无法解释的奇怪行为,我希望有人在这里.我相信100的价值!这是一个很大的数字.

控制台的几行显示预期的行为......

>factorial( 10 )
[1] 3628800
>prod( 1:10 )
[1] 3628800
> prod( as.double(1:10) )
[1] 3628800
> cumprod( 1:10 )
[1]       1       2       6      24     120     720    5040   40320  362880 3628800
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试100!我明白了(注意结果数字在14位左右开始有所不同):

> options(scipen=200) #set so the whole number shows in the output
> factorial(100)
[1] 93326215443942248650123855988187884417589065162466533279019703073787172439798159584162769794613566466294295348586598751018383869128892469242002299597101203456
> prod(1:100)
[1] 93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248
> prod( as.double(1:100) )
[1] 93326215443944150965646704795953882578400970373184098831012889540582227238570431295066113089288327277825849664006524270554535976289719382852181865895959724032
> all.equal( prod(1:100) , factorial(100) , prod( as.double(1:100) ) )
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如果我对一个设置为'已知'数字100的变量进行一些测试!然后我看到以下内容:

# This is (as far as …
Run Code Online (Sandbox Code Playgroud)

math r arithmetic-expressions factorial

22
推荐指数
3
解决办法
5898
查看次数

LINQ练习练习还是拼图?

我还在努力学习LINQ,虽然现在我已经开始每天都在工作中使用它了.不过,我仍然感觉不太.有没有人有任何具有挑战性的练习练习或谜题我可以用作代码kata来提高我的技能?

我将其留作社区维基,所以它可能会成长为社区列表.

linq

21
推荐指数
2
解决办法
1万
查看次数

为什么Scala中的foldLeft前面的过滤器速度慢?

我写了第一个Project Euler问题的答案:

添加1000以下的所有自然数,即3或5的倍数.

我遇到的第一件事是:

(1 until 1000).filter(i => (i % 3 == 0 || i % 5 == 0)).foldLeft(0)(_ + _)
Run Code Online (Sandbox Code Playgroud)

但它很慢(需要125毫秒),所以我重写了它,只是想到'另一种方式'而不是'更快的方式'

(1 until 1000).foldLeft(0){
    (total, x) =>
        x match {
            case i if (i % 3 == 0 || i % 5 ==0) => i + total // Add
            case _ => total //skip
        }
}
Run Code Online (Sandbox Code Playgroud)

这要快得多(只有2毫秒).为什么?我猜第二个版本只使用Range生成器,并没有以任何方式显示完全实现的集合,一次完成所有这一切,更快,内存更少.我对吗?

这里是IdeOne上的代码:http://ideone.com/GbKlP

performance scala scala-collections

21
推荐指数
2
解决办法
2584
查看次数

char*var之间的区别; 和char*var;?

只是想知道之间是否有任何区别:

char* var;
char *var;
Run Code Online (Sandbox Code Playgroud)

或者它只是一个偏好(间距)的问题?

c pointers ansi-c

21
推荐指数
1
解决办法
9102
查看次数

在HTML中组合表和分层列表

我正在努力重新设计一个遗留工具集,我正在研究如何在表现和语义上更好地显示一些信息.

数据本质上是分层的,但具有需要用户容易看到的属性.所需的布局类似于下面.

Seq     Item Name         Min  Max  - Anything under here isn't shown
 1      Identifier         1    1     (Required)
 2      Name               1    1
  2.1    First Name        1    1
  2.2    Middle Name       -    -     (Optional but unlimted)
  2.3    Last Name         1    1
 3      Age                -    1     (Optional)
Run Code Online (Sandbox Code Playgroud)

目前,这是一个完整的表,并且Seq通过插入额外的表格单元来实现对顺序()数字的交叉处理.

我面临的挑战是如何有效地显示这些信息.

首先是这个表格数据?我会说不,因为层次结构很重要,而'列'只是每个'行'中项目的属性.

如果它不是表格,它是什么以及如何做?我个人认为这是一组嵌套UL列表 - 序列号是可选的,并不总是一个数字.如果它是一组列表,那将正确缩进子列表,但是呈现短属性的最佳方式是什么?

如果它是一个表,那么在表中呈现层次结构的语义存在的最佳方法是什么?

html css html-table wcag wcag2.0

20
推荐指数
3
解决办法
2万
查看次数

C中的多维数组:它们是锯齿状的吗?

关于C编程语言(ANSI-C)的一个简单问题:

C中的多维数组是锯齿状的吗?

我的意思是 - 我们在谈论"数组数组"(一个指向内存中其他地址的指针数组),或者这只是"长一维数组"(它是按顺序存储在内存中)?

困扰我的是我有点确定:

matrix[i][j] 相当于 * ( * (matrix + i) + j)

c arrays jagged-arrays multidimensional-array ansi-c

19
推荐指数
2
解决办法
2126
查看次数

命名参数可以与Python枚举一起使用吗?

例:

class Planet(Enum):

    MERCURY = (mass: 3.303e+23, radius: 2.4397e6)

    def __init__(self, mass, radius):
        self.mass = mass       # in kilograms
        self.radius = radius   # in meters
Run Code Online (Sandbox Code Playgroud)

参考:https://docs.python.org/3/library/enum.html#planet

我为什么要这样做?如果构造函数列表中有一些原始类型(int,bool),那么使用命名参数会很好.

python enums named-parameters python-3.x

19
推荐指数
4
解决办法
873
查看次数