2013-03-23 4 views
-4

저는 파스칼을 배우는 중이며이 방법을 찾는 방법을 찾으려했지만 지금은 파이썬에서 예제를 발견했지만 파이썬이 어떻게 작동하는지 전혀 알지 못합니다. 내일은 프로그램입니다. 그러나 이것은 중요한 부분입니다. 그리고 그것을 가지고 있지 않으면 실패 할 수도 있습니다 .- 파스칼에서 어떻게 작동하는지 설명해 주시겠습니까?이 설명이 필요합니다.

def checkIDCode(code): 
     if len(code) != 11 or not code.isdigit(): 
       return False 

     c = map(int,code) 
     w1 = [1,2,3,4,5,6,7,8,9,1] 
     w2 = [3,4,5,6,7,8,9,1,2,3] 

     s1 = sum(map(lambda x,y: x*y, c[:-1], w1))%11 
     s2 = (sum(map(lambda x,y: x*y, c[:-1], w2))%11)%10 

     return s1 == c[-1] or s1 == 10 and s2 == c[-1] 
+0

파스칼에서 어떻게 작동합니까? 파이썬 코드이기 때문에 전혀 아닙니다. 이 코드를 Pascal로 변환하거나이 코드의 기능을 설명하기 만하면됩니다. [나는 downvoter 아니지만이 질문은 연구 노력을 표시하지 않습니다] – TLama

+2

닫힌 경우 귀하의 질문을 재 게시하지 마십시오. 대신 * 이전 질문을 편집 * 할 수 있습니다. 그것을 향상시키고 다시여십시오. –

+0

나는 그것이 무엇을하는지 알지만, 어떤 작업과 fuctions가 파스칼로 이것을 할 필요가 있는지 알 수 없다. 이것은 내 프로그램의 네 번째 부분이지만, 나는 그것을 알아낼 수 없다.이 함수는 파스칼로 이것을 수행하는 데 필요하다. – BeginnerPascal

답변

1

코드를 살펴 보겠습니다.

In [1]: code = [str(i) for i in range(1,12)] 

In [2]: len(code) 
Out[2]: 11 

In [3]: code2 = '12345678912' 

In [4]: code2.isdigit() 
Out[4]: True 

다음 :

c = map(int,code) 

이 목록에 code 변환

if len(code) != 11 or not code.isdigit(): 
    return False 

code이 열한 자리의 목록, 또는 열한 자리 문자열이어야 있음을 알려줍니다 정수.

In [3]: code 
Out[3]: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'] 

In [4]: map(int,code) 
Out[4]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 

In [5]: code2 = '12345678912' 

In [6]: map(int,code2) 
Out[6]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2] 

w1w2 숫자의 목록입니다.

s1 = sum(map(lambda x,y: x*y, c[:-1], w1))%11 

이제 까다로운 문제가 발생했습니다.

slicing 구문 목록의 일부 사본을 반환

In [19]: c 
Out[19]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 

In [20]: c[:-1] 
Out[20]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

map 함수 익명 함수를 적용한다. 이 경우 c[:-1]w1 번 호가 곱합니다.

In [21]: map(lambda x,y: x*y, c[:-1], w1) 
Out[21]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 10] 

sum 함수는 명백한 일을합니다.

s2 = (sum(map(lambda x,y: x*y, c[:-1], w2))%11)%10 

마지막 줄 :

return s1 == c[-1] or s1 == 10 and s2 == c[-1] 
In [23]: sum(map(lambda x,y: x*y, c[:-1], w1))%11 
Out[23]: 9 

In [24]: 295/11 
Out[24]: 26 

In [25]: 295-11*26 
Out[25]: 9 

이제 다음 이해할 수 있어야 :

In [22]: sum(map(lambda x,y: x*y, c[:-1], w1)) 
Out[22]: 295 

% OPERATOR 시스템은 나머지 부문을한다그것은 말한다; 이 c의 마지막 요소와 같거나 s1이 10이고 s2c의 마지막 요소 인 경우 True을 반환하십시오. 그렇지 않으면 거짓을 반환합니다.

관련 문제