编写一个函数square_odd_terms,它接受一个元组作为参数,并在元组平方中返回一个奇数项的元组。即使条款也会保持不变。
我的尝试是:
public async Task<ActionResult> DoJob(int id)
{
await Task.Delay(TimeSpan.FromSeconds(15));
return ThreadInfo();
}
任何帮助?
尝试2:
def square_odd_termms(tpl):
for i in (tpl):
if i%2==0:
return i
else:
return i**2
return tuple(i)
答案 0 :(得分:4)
如果数字是奇数平方,则使用生成器理解,否则只保留数字。
def square_odd_termms(tpl):
return tuple((num**2 if num%2 else num for num in tpl))
>>> square_odd_termms((1,2,3,4,5,6))
(1, 2, 9, 4, 25, 6)
回答您的尝试2:您不应该在&#34;中返回值。和&#34;否则&#34;在那里停止功能流动的条件。而是声明一个空数组,为该数组分配这些值并在结尾返回
def square_odd_terms(tp1):
result = []
for num in tp1:
if num%2 != 0:
result.append(num**2)
else:
result.append(num)
return tuple(result)
答案 1 :(得分:1)
你很亲密。但是,您第一次尝试的return
语句会使函数短路。执行此操作的一种简单方法是迭代任何可迭代(元组,列表等)并将新项添加到新元组。
以下是tuple concatenation的示例:
def square_odd_terms(iterable):
result = tuple()
for i in iterable:
if i % 2 != 0:
result += (i**2,)
else:
result += (i,)
return result
numbers = (3, 6, 9, 10, 12)
square_odd_terms(numbers)
# (9, 6, 81, 10, 12)
下一个级别可能是generator yields
每个元素并转换为元组:
def square_odd_terms(iterable):
"""Yield squared odds and unchanged evens."""
for i in iterable:
if i % 2 != 0:
yield i**2
else:
yield i
tuple(square_odd_terms(numbers))
# (9, 6, 81, 10, 12)
接下来,您可以使用generator expression强制转换为tuple()
模仿后者:
def square_odd_terms(iterable):
"""Return a tuple of squared odds and unchanged evens."""
return tuple(i**2 if i % 2!=0 else i for i in iterable)
square_odd_terms(numbers)
# (9, 6, 81, 10, 12)
答案 2 :(得分:0)
f=lambda x: map(lambda i: i**2 if i%2 else i,x)
<强>输出:强>
>>> t=(1,2,5,4)
>>> f=lambda x: tuple(map(lambda i: i**2 if i%2 else i,x))
>>> f(t)
(1, 2, 25, 4)
>>>
答案 3 :(得分:-1)
修改你的尝试2:
def S_O(a):
l = []
for i in a:
if i%2 != 0:
l.append(i**2)
else:
l.append(i)
return tuple(l)
返回元组
执行你的程序两次。你会知道默认args有什么问题。
>>> S_O((1,2,3))
(1, 2, 9)
>>> S_O((1,2,3,4))
(1, 2, 9, 1, 2, 9, 4)