我正在阅读一本算法书,其中包含以下二进制搜索算法:
public class BinSearch {
static int search ( int [ ] A, int K ) {
int l = 0 ;
int u = A. length ?1;
int m;
while (l <= u ) {
m = (l+u) /2;
if (A[m] < K) {
l = m + 1 ;
} else if (A[m] == K) {
return m;
} else {
u = m?1;
}
}
return ?1;
}
}
Run Code Online (Sandbox Code Playgroud)
作者说:"错误在于m = (l+u)/2;它可能导致溢出的分配,应该被替换为m = l …
我正在将一个程序从Python2(不知道使用的确切版本)移植到Python3.3并更新一些东西,但这个循环检查一组最近访问的文件路径是否存在实际文件崩溃.
for index in range(story.recentFiles.GetCount()):
try:
if not os.path.exists(story.recentFiles.GetHistoryFile(index)): pass
except IOError:
self.RemoveRecentFile(story, index)
break
Run Code Online (Sandbox Code Playgroud)
访问单个文件工作正常,因此它与循环有关.如果我使用调试器逐步完成循环,代码工作正常,但如果我只是运行应用程序,它会在"python.exe已停止响应"错误时崩溃.
然而,最奇怪的部分必须是,当我在之前添加一个print语句时os.path.exists,它会在常规的runthrough上工作:
for index in range(story.recentFiles.GetCount()):
try:
print('test') # Why does printing this make it not crash??
if not os.path.exists(story.recentFiles.GetHistoryFile(index)): pass
except IOError:
self.RemoveRecentFile(story, index)
break
Run Code Online (Sandbox Code Playgroud)
怎么了?我假设它与循环的速度与文件访问时间或某些东西有某种关系,因为慢慢地步进允许它执行正常,但老实说我不知道问题是什么.
我试图使用定义在haskell中打印教堂数字:
0 := ?fx.x
1 := ?fx.f x
Run Code Online (Sandbox Code Playgroud)
Haskell代码:
c0 = \f x -> x
c1 = \f x -> f x
Run Code Online (Sandbox Code Playgroud)
当我在haskell控制台中输入它时,我得到一个错误
test> c1
<interactive>:1:0:
No instance for (Show ((t -> t1) -> t -> t1))
arising from a use of `print' at <interactive>:1:0-1
Possible fix:
add an instance declaration for (Show ((t -> t1) -> t -> t1))
In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚错误说的是什么.
谢谢!
使用高阶函数和Lambda会使运行时间和内存效率更好还是更差?例如,要乘以列表中的所有数字:
nums = [1,2,3,4,5]
prod = 1
for n in nums:
prod*=n
Run Code Online (Sandbox Code Playgroud)
VS
prod2 = reduce(lambda x,y:x*y , nums)
Run Code Online (Sandbox Code Playgroud)
除了较少的代码行/使用功能方法之外,HOF版本是否比循环版本有任何优势?
编辑:
我无法将此作为答案添加,因为我没有所需的声誉.我根据@DSM的建议使用timeit绑定了循环和HOF方法
def test1():
s= """
nums = [a for a in range(1,1001)]
prod = 1
for n in nums:
prod*=n
"""
t = timeit.Timer(stmt=s)
return t.repeat(repeat=10,number=100)
def test2():
s="""
nums = [a for a in range(1,1001)]
prod2 = reduce(lambda x,y:x*y , nums)
"""
t = timeit.Timer(stmt=s)
return t.repeat(repeat=10,number=100)
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
Loop:
[0.08340786340144211, 0.07211491653462579, 0.07162720686361926, 0.06593182661083438, 0.06399049758613146, 0.06605228229559557, 0.06419744588664211, 0.0671893658461038, 0.06477527090075941, …Run Code Online (Sandbox Code Playgroud) 我想创建一个弹出消息框,提示用户输入输入.我在一个类中有这个方法.我将我的代码基于java2s的本指南.
class MyDialog:
def __init__(self, parent):
top = self.top = Toplevel(parent)
Label(top, text="Value").pack()
self.e = Entry(top)
self.e.pack(padx=5)
b = Button(top, text="OK", command=self.ok)
b.pack(pady=5)
def ok(self):
print "value is", self.e.get()
self.top.destroy()
root = Tk()
d = MyDialog(root)
root.wait_window(d.top)
Run Code Online (Sandbox Code Playgroud)
但在这方面,top = self.top = Toplevel(parent)对我不起作用.
我有一个我想要完成的模型.

我的程序结构看起来像这样:
class MainUI:
def__int__(self):
...
self.initUI()
def initUI(self):
.......
Popup = Button(self, text="Enter Value", command=self.showPopup)
def showPopup(self):
#create the popup with an Entry here
Run Code Online (Sandbox Code Playgroud)
如何在Python中创建一个接受用户输入的消息框?
我在这里提到了几个关于递归的问题但是我无法理解递归是如何适用于这个特定问题的:递归程序在Python中获取字符串中的所有字符组合:
st= []
def combi(prefix, s):
if len(s)==0: return
else:
st.append(prefix+s[0])
''' printing values so that I can see what happens at each stage '''
print "s[0]=",s[0]
print "s[1:]=",s[1:]
print "prefix=",prefix
print "prefix+s[0]=",prefix+s[0]
print "st=",st
combi(prefix+s[0],s[1:])
combi(prefix,s[1:])
return st
print combi("",'abc')
Run Code Online (Sandbox Code Playgroud)
我已经打印了值,以便我可以看到发生了什么.这是输出:
s[0]= a
s[1:]= bc
prefix=
prefix+s[0]= a
st= ['a']
s[0]= b
s[1:]= c
prefix= a
prefix+s[0]= ab
st= ['a', 'ab']
s[0]= c
s[1:]=
prefix= ab
prefix+s[0]= abc
st= ['a', 'ab', 'abc']
s[0]= c
s[1:]=
prefix= a ----> How …Run Code Online (Sandbox Code Playgroud) 在我的视图中,我有一个按钮,按下时会弹出一个DatePickerDialog.poppedup对话框有一个"完成"按钮.当我按下该按钮时,所选日期将填充到EditText框中.
现在,当我按下后退按钮(
),它仍然在EditText中填充日期.如何在不从中返回任何值的情况下关闭对话框.
这是我得到的代码 -
调用片段的活动:
public class TransactionActivity extends FragmentActivity implements iRibbonMenuCallback {
.....
public void selectDate(View view) {
// This is the method invoked by the button
SelectDateFragment newFragment = new SelectDateFragment();
newFragment.show(getSupportFragmentManager(), "DatePicker");
}
public void populateSetDate(int year, int month, int day) {
// Puts the date in the EditText box
mEdit = (EditText)findViewById(R.id.DateText);
mEdit.setText(month+"/"+day+"/"+year);
}
}
Run Code Online (Sandbox Code Playgroud)
Dialog的片段(基于Android API指南中的此页面):
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar …Run Code Online (Sandbox Code Playgroud) 我想为风景和肖像设计不同的布局.但两个方向最终都使用相同的布局xml.我已经在StackOverflow上找到了十几个问题,但没有一个能解决我的问题.
在布局下我有一个activity_main.xml文件.我有不同横向布局的文件夹,如本答案所述:
layout/
activity_main.xml
layout-land-hdpi/
activity_main.xml
layout-land-ldpi/
activity_main.xml
layout-land-mdpi/
activity_main.xml
layout-small-land-ldpi/
activity_main.xml
Run Code Online (Sandbox Code Playgroud)
它们具有相同的activity_main.xml文件,但背景颜色不同.
我没有android:configChanges在Android的AndroidManifest.xml中设置Activity.我没有压倒性的,onConfigurationChanged()因为我没有手动处理方向更改.
我在项目中使用actionbarsherlock库.我使用ActionBar Sytele Generator制作了动作栏主题.
AndroidManifest.xml中的minSdk和TargetSdk:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="17" />
Run Code Online (Sandbox Code Playgroud)
我在运行Android 4.3(Galaxy Nexus),Android 4.2.2(Nexus 7)和Android 2.3.3(Nexus S)的Emulators上运行代码.结果完全相同.
我有什么不对的吗?
谢谢!
我想从一个字符串中删除(撇号).
例如:
a="it's tail was big".split()
for i in range(len(a)):
a[i]= a[i].strip(r"\'s")
Run Code Online (Sandbox Code Playgroud)
变成了
['it', 'tail', 'wa', 'big']
Run Code Online (Sandbox Code Playgroud)
而我期待
['it', 'tail', 'was', 'big']
Run Code Online (Sandbox Code Playgroud)
我如何使它剥离而不是s?我也尝试过strip(r"\'s")而且它也不起作用.
和
有没有比我做的更好的方法呢?
谢谢!
我有一个定义方法的接口。我有一个实现这个接口的结构。在其中,我实现了该接口中的方法,并且还定义了其他方法。
例如:
package main
import (
"fmt"
)
type Animal interface {
MakeNoise()
}
type Dog struct {
color string
}
/* Interface implementation */
func (d *Dog) MakeNoise() {
fmt.Println("Bark!")
}
/* End Interface implementation */
func (d *Dog) WagTail() {
fmt.Println(d.color + " dog: Wag wag")
}
func NewDog(color string) Animal {
return &Dog{color}
}
func main() {
dog := NewDog("Brown")
dog.MakeNoise()
dog.WagTail()
}
Run Code Online (Sandbox Code Playgroud)
在游乐场上:https ://play.golang.org/p/B1GgoNToNl_l
这里,WagTail() 不是 Animal 接口的一部分,而是属于 Dog 结构。运行此代码会出现错误
dog.WagTail 未定义(Animal 类型没有字段或方法 …