2016-07-13 2 views
1

3 가지 변수 x, y, z가 있습니다. 수행 할 3 가지 테스트의 결과에 따라 값이 다릅니다. 따라서 테스트 결과는 8 가지가 될 것입니다. 이 8 가지 결과는 dic이라는 dictinary에 저장된 해당 결과와 일치합니다. 해당 결과를 x, y, z 변수에 전달해야합니다.파이썬 사전의 결과를 호출하고 몇 가지 변수에 결과를 전달하는 방법

아래의 코드 :

fetch = requests.get('http://www.example.com') 

match_M = re.search(r'something1...' , fetch.text) 
if match_M != None: match_M = 1 
else: match_M = 0 

match_K = re.search(r'something2...' , fetch.text) 
if match_K != None: match_K = 1 
else: match_K = 0 

match_T = re.search(r'something3...' , fetch.text) 
if match_T != None: match_T = 1 
else: match_T = 0 

outcome = [[0,3,1], [0,2,1,], [0,3,2], [0,2,1], [1,3,1], [1,3,2], [2,3,1], [3,3,1]] 

dic = {'111':outcome[0], '110':outcome[1], '101':outcome[2], '100':outcome[3], '011':outcome[4], '010':outcome[5], '001':outcome[6], '000':outcome[7]} 

X_num = str(match_M) + str(match_K) + str(match_T) 

print dic['X_num'] 

x, y, z = dic['X_num'] 

내가 STR (match_M) + STR (match_K) + STR (match_T)를 사용할 필요가 없습니다 어디를 작성하는 더 좋은 방법이 있나요, 어쩌면 난 그냥 수 dic 같은 것을 사용하십시오 [ 'match_M + match_K + match_K']

죄송합니다.이 소리가 너무 어리석은 경우, 방금 배우기 시작했습니다.

+1

코드가 이미 작동하고 당신은 단지 그것을 개선 도움이 필요한 경우, [코드 검토 (HTTP : // 코드 검토. stackexchange.com/)는 StackOverflow보다 더 적합한 사이트입니다. – skrrgwasme

+0

추천 해 주셔서 감사합니다. @skrrgwasme – sam

답변

1

아마도 이와 같은 것이 개선 될 것입니까?

fetch = requests.get('http://www.example.com') 

match_M = 0 if re.search(r'something1...' , fetch.text) else 4 
match_K = 0 if re.search(r'something2...' , fetch.text) else 2 
match_T = 0 if re.search(r'something3...' , fetch.text) else 1 

index = match_M + match_K + match_T 

outcomes = [[0,3,1], [0,2,1], [0,3,2], [0,2,1], [1,3,1], [1,3,2], [2,3,1], [3,3,1]] 

x, y, z = outcomes[index] 

이 작업은 3 자리 진수를 구축하고 관찰을 기반으로하므로 숫자는 정 장소는 2 초 장소, 그리고 1 초 장소에있다. 나는 당신의 계획에서 1과 0을 바꿨다. 그런 식으로 "결과"는 당신이 세우는 이진수와 같은 순서이다.

약간의 "코드 골프"EDIT (죄송합니다) :

fetch = requests.get('http://www.example.com') 

x, y, z = [[0,3,1], [0,2,1], [0,3,2], [0,2,1], [1,3,1], [1,3,2], [2,3,1], [3,3,1]][ 
    sum(2**i * (0 if re.search(pattern, fetch.text) else 1) 
     for i, pattern in enumerate([r'something3', r'something2', r'something1']))] 
+0

'dic [index] 대신'결과 [index]'라고 생각합니까? –

+0

@ RahulKP 고마워! 맞아. – smarx

+0

고마워요! @smarx. 정말 도움을 주셔서 감사합니다. – sam

1

아마 적어도 라인

outcome = [[0,3,1], [0,2,1,], [0,3,2], [0,2,1], [1,3,1], [1,3,2], [2,3,1], [3,3,1]] 
dic = {'111':outcome[0], '110':outcome[1], '101':outcome[2], '100':outcome[3], '011':outcome[4], '010':outcome[5], '001':outcome[6], '000':outcome[7]} 
X_num = str(match_M) + str(match_K) + str(match_T) 

I [0, 1] 인덱스의 카디 세트의 결과와 데카르트의 제품을 반복하는 것을 선호 아래의 세 가지에 대해 약간 다르게 문제를 접근하는 것 심지어 아이디어를 확장하고 별도의 일치 변수를 사용 억제, 오히려 일치하는 튜플 것

>>> from itertools import product 
>>> dic = {k : v for k, v in zip(product([0,1], repeat = len(keys)), outcome)} 
>>> dic 
{(0, 1, 1): [0, 2, 1], (1, 1, 0): [2, 3, 1], (1, 0, 0): [1, 3, 1], (0, 0, 1): [0, 2, 1], (1, 0, 1): [1, 3, 2], (0, 0, 0): [0, 3, 1], (0, 1, 0): [0, 3, 2], (1, 1, 1): [3, 3, 1]} 
>>> dic[(match_M, match_K, match_T)] 
[1, 3, 2] 

각각 별도의 일치 변수와 그

keys = [r'something1...', r'something2...', r'something3...'] 
match = [[0, 1][re.search(key , fetch.text) != None] for key in keys] 

이것은 당신은 내가 일반적으로 [0, 1][re.search(key , fetch.text) != None]를 선호하지만, 같은의 대체 구문 0 if re.search(key , fetch.text) == None else 1가 주

키의 중요도에 따라 제한 디자인을 확장하지하는 데 도움이 될 것입니다

def foo(url, keys, outcome): 
    from itertools import product, izip 
    fetch = fetch = requests.get(url) 
    match = [[0, 1][re.search(key , fetch.text) != None] for key in keys] 
    dic = {k : v for k, v in izip(product([0,1], repeat = len(keys)), outcome)} 
    return dic[match] 

요약 똑같이 격려받습니다

+0

Abhijit을 도와 주셔서 대단히 감사합니다. 현재 수준에서는 코드를 이해하기 위해 더 많은 시간과 연습이 필요합니다. 어쨌든 고마워! 훌륭한 일. – sam

관련 문제