我在麻省理工学院的开放课件上学习CS/Python.他们希望我设计一个刽子手游戏并给我一些初步代码,用于导入一个单词列表并从那里生成一个随机单词.此代码本身返回一个错误:"不能有无缓冲的文本I/O." 这是代码:
import random
import string
WORDLIST_FILENAME = "words.txt"
def load_words():
print("Loading word list from file...")
# inFile: file
inFile = open(WORDLIST_FILENAME, 'r', 0)
# line: string
line = inFile.readline()
# wordlist: list of strings
wordlist = string.split(line)
print(" ", len(wordlist), "words loaded.")
return wordlist
def choose_word(wordlist):
return random.choice(wordlist)
Run Code Online (Sandbox Code Playgroud)
麻省理工学院课程不使用我正在使用的Python 3.0,因此可能存在问题; 正如您所看到的,我已经将声明中的"print"更新为与Python 3.0兼容的函数.
所以我对递归的概念有了相当不错的理解,但是有些实现真的让我感到震惊.以这个简单的斐波那契函数为例:
def fib(x):
if x == 0 or x == 1:
return 1
else:
return fib(x-1) + fib(x-2)
Run Code Online (Sandbox Code Playgroud)
我知道这会将斐波纳契计算分解成更小的更易处理的块.但它究竟是如何达到最终结果的呢?在递归情况下返回的确切内容是什么?看起来它只是返回一个函数调用,它将继续调用函数直到它返回1 - 但它似乎永远不会做任何真正的计算/操作.将其与经典的阶乘函数进行对比:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n)
Run Code Online (Sandbox Code Playgroud)
这里,函数显然在n上运行,每次定义一个整数,而fibonacci函数只对函数本身进行操作,直到返回1.
最后,当我们带来类似Merge Sort算法的东西时,事情变得更加怪异; 即这一段代码:
middle = int(len(L)/2)
left = sort(L[:middle], lt)
right = sort(L[middle:], lt)
print(left, right)
return merge(left, right, lt)
Run Code Online (Sandbox Code Playgroud)
left和right似乎是递归调用sort,但print语句似乎表明merge正在处理每个递归调用.那么每个递归调用以某种方式"保存"然后在返回时最终调用合并时进行操作?我越来越混淆自己的第二个......我觉得我已经接近了对递归的强烈理解,但是我对递归调用的确切回复的理解正在阻碍我.
我经常看到与此类似的代码:
return [(var, val) for val in self.domains[var]
if self.nconflicts(var, val, assignment) == 0]
Run Code Online (Sandbox Code Playgroud)
而且我就像DAMN那样性感.但后来我尝试删除它,我得到语法错误.是否有代码编写的这个漂亮的形式逆转的典型放置任何特定的规则for和if报表?
我有一个 while 循环:
def setWorkDays(dayNameList):
workDays = []
while self.count > 0: #continue loop until all 5 work days have been filled or the loop breaks at the end
for day in dayNameList: #iterate over days, adding days to work days if they are not free days, AL days, preferred days, or free Saturdays
if day in self.freeDays or day in self.alDays or (day == 'Saturday' and self.satOff is True):
continue
elif day in self.programDays:
workDays.append(day)
self.count -= 1
elif …Run Code Online (Sandbox Code Playgroud) 我有一个创建两个堆的算法,minHeap 和 maxHeap。两者之间的唯一区别是 maxHeap 反转了 minHeap 的符号,这是使用 Python 的 heapq 数据结构作为最大堆的简单技巧。这是我创建堆的代码(堆键基本上是一周中给定日期字典中的工作人员数量):
for day in self.weekDict:
if day != 'Saturday' and len(self.weekDict[day]) != 0: #saturdays and holidays not part of optimization
heapq.heappush(minHeap, (len(self.weekDict[day]), day))
heapq.heappush(maxHeap, (-len(self.weekDict[day]), day))
Run Code Online (Sandbox Code Playgroud)
minHeap 按预期工作,但是当有多个相同的键时,最大堆会给我带来奇怪的行为。见下文:
[(-8, 'Thursday'), (-7, 'Monday'), (-5, 'Friday'), (-7, 'Wednesday'), (-7, 'Tuesday')]
Run Code Online (Sandbox Code Playgroud)
为什么最近两天不正常?是不是因为只有第一天才能保证是最小值,一旦我弹出第一天,堆就会自动调整?
原谅我对Java导入的困惑 - 我来自Python背景.
我有一些使用itext库的代码:
public static void makeADoc (Person p, String outfile) throws DocumentException,FileNotFoundException{
Document document = new Document;
PdfWriter.getInstance(document, new FileOutputStream(outfile));
document.open();
document.add(new Paragraph("Hello " + p.getFirst() + ",\n" + "You've just won the lotto!"));
document.close();
}
Run Code Online (Sandbox Code Playgroud)
我已将适用的itext-pdf jar文件添加到项目的路径中.我已使用通配符import语句在此类的开头导入了整个库:
import com.itextpdf.*;
Run Code Online (Sandbox Code Playgroud)
然而,Eclipse仍然为Document对象和DocumentException以及FileNotFound异常对象提供了红色下划线错误.我可以选择从itextpdf导入Document类,但看起来我的通配符语句应该已经覆盖了.这是怎么回事?
我有HTML看起来像这样:
<section class="container" id="banner">
<header class="span12" id="header">
<div class="span3 offset1" id="logo">Logo</div>
<nav class="span10 offset1" id=bannerNav">
<ul>
<li>Home</li>
<li>Notebook</li>
<li>Article Archive</li>
<li>Tags</li>
<li>About</li>
</ul>
</nav>
</header>
</section>
Run Code Online (Sandbox Code Playgroud)
使用这样的CSS选择器:
#bannerNav ul li {
display:inline-block;
font-size:20px;
}
Run Code Online (Sandbox Code Playgroud)
但是bannerNav,尽管DOM层次结构与我在构造函数中创建的类似,但是未包含在包含在id中的uls中包含的列表项.我错过了什么?
我有一张谷歌地图,在整个曼哈顿城都有很多针脚.为了更好地组织这个幽闭恐怖的针脚,我想提供一个缩小的视图,将曼哈顿划分为可以点击的干净描绘的街区,然后放大并显示该邻域区域中的各个针脚.这是我想要实现的一个例子:
我不知道从哪里开始.我已经阅读了谷歌地图文档,但我仍然不确定(a)我应该用于绘制边界的javascript方法,以及(b)我可以获得有关如何绘制曼哈顿邻域边界的有意义信息.
有人有这方面的经验吗?
有没有办法获取 Django 项目中所有特定于项目的应用程序的列表?settings.INSTALLED_APPS 将为我提供已安装的所有应用程序的列表,但其中包括 django.contrib.auth 等内容。我只想要使用 createapp 命令生成的应用程序。
作为后续问题,有没有办法动态获取给定应用程序中每个模块的列表?
我有一个带有一系列数字的文本文件,类似于这种格式:
1 80,982 163,8164 170,2620 145,648 200,8021 173,2069 92,647 26,4122 140,546 11,1913 160,6461 27,7905 40,9047 150,2183 61,9146 159,7420 198,1724 114,508 104,6647 30,4612 99,2367 138,7896 169,8700 49,2437 125,2909 117,2597 55,6399
Run Code Online (Sandbox Code Playgroud)
我想创建一个嵌套字典,将两个数字集合中的第一个数字映射到第二个数字,并将所有这些数字映射到行号.因此,对于此示例中的前几个条目(第1行),它看起来像这样:
{1: {80: 982}, {163: 8164}, {170: 2620}}
Run Code Online (Sandbox Code Playgroud)
我不确定如何通过有限的文本解析功能来实现这一点.我会使用制表符和逗号分隔符作为分隔符吗?