在编程的运动,它首先要求编程的阶乘函数,然后计算的总和:1! + 2! + 3! +... n!在O(n)乘法(所以我们不能直接使用阶乘).我不是在寻找这个特定(微不足道)问题的解决方案,我正在尝试探索Haskell的能力,这个问题是我想要玩的玩具.
我认为Python的生成器可以很好地解决这个问题.例如 :
from itertools import islice
def ifact():
i , f = 1, 1
yield 1
while True:
f *= i
i += 1
yield f
def sum_fact(n):
return sum(islice(ifact(),5))
Run Code Online (Sandbox Code Playgroud)
然后我试图弄清楚Haskell中是否有类似于这个生成器的行为,我认为懒惰会让所有员工都没有任何额外的概念.
例如,我们可以用我的Python ifact替换
fact = scan1 (*) [1..]
Run Code Online (Sandbox Code Playgroud)
然后用以下方法解决练习:
sum n = foldl1 (+) (take n fact)
Run Code Online (Sandbox Code Playgroud)
我想知道这个解决方案是否真的与Python关于时间复杂性和内存使用的"等效".我会说Haskell的解决方案永远不会存储所有列表事实,因为它们的元素只使用一次.
我是对还是完全错了?
编辑:我应该更准确地检查:
Prelude> foldl1 (+) (take 4 fact)
33
Prelude> :sprint fact
fact = 1 : 2 : 6 : 24 …Run Code Online (Sandbox Code Playgroud) 我和朋友正在玩游戏.我们希望将一个pygame窗口嵌入到tkinter或WxPython框架中,以便我们可以包含WX或Tkinter支持的文本输入,按钮和下拉菜单.我已经在互联网上搜索了答案,但我发现所有人都在问同样的问题,这些都没有得到很好的回答.
实现嵌入到tkinter或WX帧中的pygame显示的最佳方法是什么?(TKinter更好)
将这些功能与pygame显示一起包含的任何其他方式也可以.
我试图在变量Result中保存结果或函数runcmd.这是我尝试过的:import subprocess
def runcmd(cmd):
x = subprocess.Popen(cmd, stdout=subprocess.PIPE)
Result = x.communicate(stdout)
return Result
runcmd("dir")
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我得到了这个结果:
Traceback (most recent call last):
File "C:\Python27\MyPython\MyCode.py", line 7, in <module>
runcmd("dir")
File "C:\Python27\MyPython\MyCode.py", line 4, in runcmd
x = subprocess.Popen(cmd, stdout=subprocess.PIPE)
File "C:\Python27\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 893, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
我试图在python2.7中运行.exe文件.我已经尽了一切努力从搜索它.以下是我尝试过的一些代码:
subprocess.Popen(r"C:\Programs Files\Internet Explorer\iexplore.exe")
Run Code Online (Sandbox Code Playgroud)
和:
subprocess.Popen(["cmd","/c",r"C:\Programs Files\Internet Explorer\iexplore.exe"])
Run Code Online (Sandbox Code Playgroud)
和:
os.popen(r"C:\Programs Files\Internet Explorer\iexplore.exe")
Run Code Online (Sandbox Code Playgroud)
除了第一个(导致Windows错误)之外的所有内容似乎都没有运行iexplore.exe.
有没有其他方法来运行.exe文件?
是否存在非递归方式,我可以通过添加最后3个数字来制作"斐波那契"序列?
这是我尝试这样做的递归方式.
def fib3(n):
if n < 3:
return 1
else:
return fib3(n-1) + fib3(n-2) + fib3(n-3)
Run Code Online (Sandbox Code Playgroud)
回报 1+1+1+3+5+9+17...+(n-1) + (n-2) + (n-3)
任何帮助将不胜感激.
提前致谢