接受一个可迭代函数和一个函数的函数,return 一个字符串

functon that takes an iterable and a function, return a string

def start_when(iterable,p):
    s = ''
    a = ''
    x = iter(iterable)
    for y in x:
        a = a + y
    try: 
        for y in x:
            if p(y) == True:
                s = s + a[a.index(y):]   
                break       
    except StopIteration:
        pass
    return s

start_when 生成器将一个可迭代对象和一个谓词作为参数:它从可迭代对象中生成每个值,从第一个值开始,谓词 return 为 True

例如:

for i in start_when('combustible', lambda x : x >= 'q’):
    print(i,end='')

它打印

ustible

但是,当我的函数接受输入时

('abcdefghijk', lambda x : x >='d')])

应该return

defghijk

但它return什么都不是

下面是我得到的错误:

21 *Error: ''.join([str(v) for v in start_when('abcdefghijk', lambda x : x >='d')]) ->  but should -> defghijk
22 *Error: ''.join([str(v) for v in start_when(hide('abcdefghijk'), lambda x : x >='d')]) ->  but should -> defghijk
23 *Error: ''.join([str(v) for v in start_when(hide('abcdefghijk'), lambda x : x >'f')]) ->  but should -> ghijk

有人可以帮我修复我的功能吗?非常感谢!

好吧,您的方法根本不是生成器方法。以下生成器方法将非常适合您:

def start_when(iterable,p):
    x=iter(iterable)
    for y in x:
        if p(y):
            yield y
            break
    for y in x:
        yield y

并这样称呼它:

for i in start_when('abcdefghijk', lambda x : x >='d'):
    print(i,end='')