我想在不计算python中 customersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (customersList.getAdapter() == adapter) {
String[] invoice =(String[]) parent.getAdapter().getItem(position);
switch (invoice[6]){
case "Payment":
Intent approvalDetailsIntent1 = new Intent(previous.this,PpaymentDetails.class);
approvalDetailsIntent1.putExtra(Common.APPROVALID,invoice[0]);
approvalDetailsIntent1.putExtra(Common.ENTRYNO, invoice[1]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_MODE, invoice[4]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_DATE, invoice[3]);
approvalDetailsIntent1.putExtra(Common.AMOUNT, invoice[5]);
approvalDetailsIntent1.putExtra(Common.COMPANY_DETAILS, invoice[2]);
approvalDetailsIntent1.putExtra(Common.GENERAL_NOTES,invoice[8]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_TYPE, invoice[6]);
startActivity(approvalDetailsIntent1);
break;
case "Expense":
Intent approvalDetailsIntent2 = new Intent(previous.this, PexpenseDetail.class);
approvalDetailsIntent2.putExtra(Common.APPROVALID, invoice[0]);
approvalDetailsIntent2.putExtra(Common.REFNO, invoice[1]);
startActivity(approvalDetailsIntent2);
break;
}
// Common.toastMessage(getContext(), "scene aan");
}
else if (customersList.getAdapter() == Padapter) {
String[] payment =(String[]) parent.getAdapter().getItem(position);
Intent approvalDetailsIntent1 = new Intent(previous.this,PpaymentDetails.class);
approvalDetailsIntent1.putExtra(Common.APPROVALID, payment[0]);
approvalDetailsIntent1.putExtra(Common.ENTRYNO, payment[1]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_MODE, payment[4]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_DATE, payment[3]);
approvalDetailsIntent1.putExtra(Common.AMOUNT, payment[5]);
approvalDetailsIntent1.putExtra(Common.COMPANY_DETAILS, payment[2]);
approvalDetailsIntent1.putExtra(Common.GENERAL_NOTES, payment[8]);
approvalDetailsIntent1.putExtra(Common.PAYMENT_TYPE, payment[6]);
startActivity(approvalDetailsIntent1);
}
else if (customersList.getAdapter() == Eadapter) {
String[] pExpence =(String[]) parent.getAdapter().getItem(position);
Intent approvalDetailsIntent2 = new Intent(previous.this, PexpenseDetail.class);
approvalDetailsIntent2.putExtra(Common.APPROVALID, pExpence[0]);
approvalDetailsIntent2.putExtra(Common.REFNO, pExpence[1]);
startActivity(approvalDetailsIntent2);
}
}
});
的值的情况下打印Hello World n**n
次。
例如,
如果n为2,则应打印n**n
4次。
如果n为3,则应打印'Hello World'
27次,依此类推。
我被允许使用循环和递归但现在允许使用任何内置函数或计算n ** n的值并多次打印。
提前谢谢。
答案 0 :(得分:4)
首先:
def compose(f, g):
def wrapper(x):
return f(g(x))
wrapper.__name__ = f'compose({f.__name__}, {g.__name__})'
return wrapper
def ntimes(n):
def wrap(func):
if n == 1: return func
return compose(func, ntimes(n-1)(func))
return wrap
这应该是显而易见的,对吗? ntimes(3)
是一个函数,可以将任何函数与自身组合3次,因此ntimes(3)(func)(x)
为func(func(func(x)))
。
现在,我们只需要在ntimes
上ntimes
拨打两个级别相同的n
。我可以编写一个nntimes
函数来执行与ntimes
相同的操作,但是对于多样性,让它更平坦:
def nntimes(n, func, arg):
f = ntimes(n)
return f(f)(func)(arg)
因此,nntimes(n, func, arg)
会在ntimes(n)
上调用ntimes(n)
,它会为您提供一个函数,用于组合其参数n**n
次,然后在arg
上调用该函数。
现在我们只需要传入一个函数。print
不起作用,因为它会返回None
,因此您无法自行编写它。所以:
def printret(x):
print(x, end=' ')
return x
现在我们称之为:
>>> nntimes(2, printret, 'Hi')
hi hi hi hi
>>> nntimes(3, printret, 'Hi')
hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi
如果你仍然无法理解发生了什么,也许这会有所帮助。让我们做一些比一般nntimes
更简单的事情,然后硬编码三,然后打印出构图:
>>> thrice = ntimes(3)
>>> print(thrice(thrice)(printret).__name__)
compose(compose(compose(printret, compose(printret, printret)), compose(compose(printret, compose(printret, printret)), compose(printret, compose(printret, printret)))), compose(compose(compose(printret, compose(printret, printret)), compose(compose(printret, compose(printret, printret)), compose(printret, compose(printret, printret)))), compose(compose(printret, compose(printret, printret)), compose(compose(printret, compose(printret, printret)), compose(printret, compose(printret, printret))))))
所有这些括号!就像我已经死了,去了Lisp!
如果你在Church numerals上阅读,你会发现我在这里被骗了。将简单的函数写入Church-编码一个数字并对两个Church数字进行取幂,然后将其与我的代码进行比较。那么,我真的避免计算n**n
的价值吗?
当然,你可以通过一个简单的平面递归和没有高阶函数,或者用itertools
来做更多这样的事情(好吧,你不允许使用内置函数,但是所有内容都是itertools在文档中附带了源和/或或大致相同的&#34;函数,因此您可以复制它。但那有趣的是什么?毕竟,如果你真的想要一个Pythonic,简单或高效的版本,你只需循环range(n**n)
。我认为这个采访问题的重点是强迫你在Pythonic框外思考。
答案 1 :(得分:0)
>>> def new(number,loop):
... if loop == 1:
... return number
... else:
... return number * new(number,loop-1)
...
>>> a = new(3,3)
>>> print a
27
>>> print "Hello "*a
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
答案 2 :(得分:0)
只是为了好玩并给出一个有启发性的答案,你可以用一个非常简单的递归函数这样做而不用计算n**n
:
def fun(n, level):
if (level == n):
print('Hello World')
return
for i in range (n):
fun(n, level+1)
如果你试试
fun(2,0)
你得到了
Hello World
Hello World
Hello World
Hello World
fun(3,0)
同样的作品...希望有所帮助。是一个相当简单的解决方案。 @abarnert精彩的解决方案!
最好,翁贝托