我已经看到了两种在Python中创建无限循环的方法:
while 1:
do_something()
Run Code Online (Sandbox Code Playgroud)while True:
do_something()
Run Code Online (Sandbox Code Playgroud)这些之间有什么区别吗?比另一个更pythonic?
我使用以下代码解决了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)
这三个功能的工作原理如下:
然后我编写了一个新函数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:超出最大递归深度.
我的递归函数出了什么问题?或者是否有一些特定的方法来避免递归限制?
我正在寻找关于项目欧拉的问题三十一,请问,有多少不同的方法可以使用任意数量的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) 在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) 我还在努力学习LINQ,虽然现在我已经开始每天都在工作中使用它了.不过,我仍然感觉不太好.有没有人有任何具有挑战性的练习练习或谜题我可以用作代码kata来提高我的技能?
我将其留作社区维基,所以它可能会成长为社区列表.
我写了第一个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
我正在努力重新设计一个遗留工具集,我正在研究如何在表现和语义上更好地显示一些信息.
数据本质上是分层的,但具有需要用户容易看到的属性.所需的布局类似于下面.
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列表 - 序列号是可选的,并不总是一个数字.如果它是一组列表,那将正确缩进子列表,但是呈现短属性的最佳方式是什么?
如果它是一个表,那么在表中呈现层次结构的语义存在的最佳方法是什么?
关于C编程语言(ANSI-C)的一个简单问题:
C中的多维数组是锯齿状的吗?
我的意思是 - 我们在谈论"数组数组"(一个指向内存中其他地址的指针数组),或者这只是"长一维数组"(它是按顺序存储在内存中)?
困扰我的是我有点确定:
matrix[i][j] 相当于 * ( * (matrix + i) + j)
例:
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),那么使用命名参数会很好.