最近在面试时,我遇到了以下问题:
编写一个能够在命令行上运行的脚本python
它应该在命令行中使用两个单词(或者如果您愿意,可以选择查询用户通过控制台提供两个单词).
鉴于这两个词:a.确保它们长度相等b.确保它们都是您下载的英语有效单词词典中的单词.
如果是这样,请计算您是否可以通过以下一系列步骤从第一个单词到达第二个单词a.您可以一次更改一个字母b.每次更改字母时,结果字也必须存在于字典c中.您无法添加或删除字母
如果可以访问这两个单词,则脚本应该打印出从一个单词到另一个单词作为单个最短路径的路径.
您可以/ usr/share/dict/words为您的单词词典.
我的解决方案包括使用广度优先搜索来找到两个单词之间的最短路径.但显然这不足以得到这份工作:(
你们能知道我做错了什么吗?非常感谢.
import collections
import functools
import re
def time_func(func):
import time
def wrapper(*args, **kwargs):
start = time.time()
res = func(*args, **kwargs)
timed = time.time() - start
setattr(wrapper, 'time_taken', timed)
return res
functools.update_wrapper(wrapper, func)
return wrapper
class OneLetterGame:
def __init__(self, dict_path):
self.dict_path = dict_path
self.words = set()
def run(self, start_word, end_word):
'''Runs the one letter game with the given start and end words.
'''
assert len(start_word) == len(end_word), \
'Start word and …Run Code Online (Sandbox Code Playgroud) 看看这个简单的例子.我不太明白为什么o1打印两次"Hello Alex".我认为因为默认的self.a总是重置为空列表.有人可以向我解释一下这里的理由是什么?非常感谢.
class A(object):
def __init__(self, a=[]):
self.a = a
o = A()
o.a.append('Hello')
o.a.append('Alex')
print ' '.join(o.a)
# >> prints Hello Alex
o1 = A()
o1.a.append('Hello')
o1.a.append('Alex')
print ' '.join(o1.a)
# >> prints Hello Alex Hello Alex
Run Code Online (Sandbox Code Playgroud) 我希望能够在Python中包装任何对象.以下似乎不可能,你知道为什么吗?
class Wrapper:
def wrap(self, obj):
self = obj
a = list()
b = Wrapper().wrap(a)
# can't do b.append
Run Code Online (Sandbox Code Playgroud)
谢谢!
假设我有一组文件。如何确保写入所有这些文件是原子的。
我考虑过写入临时文件,只有成功写入后,才对每个文件进行原子重命名。但是一次重命名所有文件并不是原子的。另外,如果我们要追加到这些文件中,这将无法扩展到非常大的文件。
取而代之的是,我想到了实施交易,但是那成了一个单独的项目。我意识到这几乎与实现小型数据库有关。
您将如何在Python中做到这一点?
d = FileWriter.open(['file1', 'file2'], 'wb+')
d.write('add hello world to files')
d.close()
Run Code Online (Sandbox Code Playgroud)
确保d.write是原子的,或者如果失败则至少回滚到原始文件。
python ×4
arguments ×1
atomicity ×1
database ×1
filesystems ×1
letter ×1
mutable ×1
optimization ×1
wrapper ×1