2016-12-07 1 views
1

문자열 목록이 있고 문자열의 모든 문자에 대해 함수를 호출하고 싶습니다. 변수를 각 함수에 할당 할 때 실행하지 않으려면 문자열을 반복 할 때만 호출하면됩니다. 내 코드는 다음과 같습니다.목록에서 함수 호출 - Python

import random 

def make_s(): 
    result = '' 

    V = make_v 
    C = make_c 
    P = make_p 
    B = make_b 

    structs = ['VPCVBCC', 'VCVVC', 'VVPCC', 'VCVBCC', 'VPCCVBC', 'VCVCC', 'VPCBC', \ 
      'VVPCVBCC', 'VCVC', 'VPCVVBC'] 

    struct = random.choice(structs) 

    for elem in struct: 
     /* Call function defined above and add the result to the result string */ 
     result += elem() 

    return result 

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

많은 감사합니다. :)

+1

을 –

답변

4

매우 가깝습니다. 특정 변수에 지정하는 것이 아니라 기능에 문자를 매핑해야합니다.

import random 

def make_s(): 
    result = '' 

    # Here we have a mapping between the characters you see, 
    # and the functions you want to call. 
    my_funcs = {"V": make_v, 
       "C": make_c, 
       "P": make_p, 
       "B": make_b} 

    structs = ['VPCVBCC', 'VCVVC', 'VVPCC', 'VCVBCC', 'VPCCVBC', 'VCVCC', 'VPCBC', \ 
      'VVPCVBCC', 'VCVC', 'VPCVVBC'] 

    struct = random.choice(structs) 

    for elem in struct: 
     # Lookup the function in your dictionary 
     func_to_call = my_funcs[elem] 
     # And call it! 
     result += func_to_call() 

    return result 
+0

Brilliant, thanks :) – ggordon

+0

어떤 변수 이름이 어떤 기능에 할당되어 있는지 (코드 내에서) 알아내는 것은 종종 어렵습니다. 변수 "V"가 가리키고있는 객체로 "V"문자를 넣는 것은 일반적으로 해킹이며 이런 식으로 피할 수 있습니다. – turbulencetoo

+1

당신은'my_funcs = { 'V': make_v(), 'C': make_c(), 'P': make_p(), 'B': make_b()}' 'for elem for struct : result + = my_funcs [elem]' –

2

유사을 약간 더 간결 지능형리스트 & 문자열 join 기능을 사용하여 전화를 작동하는 문자를 매핑하는 사전을 사용 : list`가 쉬울 수 있습니다 대신`의`dict`를 사용

import random 
def make_s(): 
    fDict = {'V': make_v(), 'C': make_c(), 'P': make_p(), 'B': make_b()} 
    structs = ['VPCVBCC', 'VCVVC', 'VVPCC', 'VCVBCC', 'VPCCVBC', 'VCVCC', 'VPCBC', \ 
      'VVPCVBCC', 'VCVC', 'VPCVVBC'] 
    struct = random.choice(structs) 
    return ''.join([fDict[elem] for elem in struct]) 
+0

감사합니다. 함수가 실행될 때마다 함수가 다른 출력을 생성한다는 것을 지적 했어야합니다. 위의 메서드가 더 잘 작동합니다. – ggordon

+0

아아아가 너무 멀었을 수도 있습니다. random.choice (structs) 그래서 그것이 이해력의 일부가 아니기 때문에 (출력에는 영향을 미치지 않는다고 생각한다.) 나는 이것이 다른 대답과 기능적으로 같아야한다고 생각한다. 그렇지 않으면 "실행될 때마다 서로 다른 출력"에 대해 어떤 차이를 만들지 모릅니다. 건배 –

관련 문제