2012-11-21 3 views
3

다음은 기능적 암호 해독 및 암호화 프로그램의 일부인 코드 섹션입니다.파이썬은 파이썬이 int 변수의 선두 0을 유지하도록합니다.

while checkvar < maxvar: # is set to < as maxvar is 1 to high for the index of var 
    #output.append("%02d" % number) 
    i =ord(var[checkvar]) - 64 # Gets postional value of i 
    i = ("%02d" % i) 
    if (checkvar + 1) < maxvar: 
     j =ord(var[(checkvar + 1)]) - 64 # Gets postional value of i 
     j = ("%02d" % j) 
     i = str(i) + str(j) #'Adds' the string i and j to create a new i 
    li.append(int(i)) 
    checkvar = checkvar + 2 

print li 

는 i 및 j는 제 (문자열) 단일 자리 숫자 앞에 0을 추가하는 문자열로 처리 된 두 변수를 볼 수있다. 그런 다음이 변수들을 결합하여 4 자리 숫자를 만듭니다 (여전히 문자열). 프로그램의 후반부에 생성 된 숫자는 pow 함수에서 사용됩니다. AS 정수는 선행 0을 제거합니다.

내 질문 : 파이썬이 int에 대한 선행 0을 유지하도록 할 수 있습니까? 나는 온라인 검색을 계속하고있다.

편집

내가 프로그램의 encrpytion 부분을 포함 한 사람들을 돕기 위해. 이것은 문제가있는 곳입니다. 위의 코드에서 생성 된 변수는 pow() 함수를 통해 전달됩니다. 이것은 문자열을 처리 할 수 ​​없기 때문에 변수를 앞에 오는 0이 없어지는 정수로 변환해야합니다.

#a = li[] 
b=int(17)#pulic = e 
c=int(2773)#=n 

lenli=int(len(li)) 
enchecker = int(0) 

#encrpted list 
enlist = [] 

while enchecker < lenli: 
    en = pow(li[enchecker],b,c)#encrpyt the message can only handle int 
    enlist.append(int(en)) 
    enchecker = enchecker + 1 

print enlist 
+1

을하는 데 도움이

print "%06d" % (int(s)) 

희망을'내가 여기 옳은 일이다 = "% 02D"%의 i' ... 왜 작동하지 않습니다 당신? – inspectorG4dget

+2

아니요, 정수 값은 선행 0으로 저장되지 않습니다. 다른 방법으로 고려할 앞에 오는 0을 몇 개 정의할까요? 현재 사용중인 문자열 형식으로 인쇄하려면 서식을 지정해야합니다. –

+0

파이썬이 정수를 저장할 때, 커버 아래에 단지 1과 0의 묶음이 있습니다. 십진수는 비트가 인간이 읽을 수있는 표현으로 변환되는 방법입니다. 사용중인 문자열 형식 지정 함수를 사용하여이 표현에 선행 0을 추가 할 수 있지만 선행 0을 int 자체에 저장할 수는 없습니다. 그것은 단지 이해가되지 않습니다. – NullUserException

답변

11

앞에 오는 0의 개념은 숫자 개념이 아닌 표시 개념입니다. 값을 변경하지 않고 무한 수의 선행 0을 숫자에 넣을 수 있습니다. 숫자 개념이 아니기 때문에 숫자와 함께 저장되지 않습니다.

숫자를 문자열로 변환 할 때 원하는 0을 결정해야합니다. 원하는 경우 해당 번호를 별도로 보관할 수 있습니다.

10

1, 01 및 001에 관한 위의 설명이 모두 INT와 같지만 시간적 모델링 또는 선행 0을 유지하기위한 순차적 영화 제작에 매우 유용 할 수 있습니다. 무비 클립이 올바른 순서인지 확인하기 위해 자주 수행합니다. zfill을 사용하면 쉽게 할 수 있습니다. zfill은 숫자의 str 버전이 적어도 당신이 말하는 문자 수 이상임을 확인하고 "number"문자열의 왼쪽에 0을 채움으로써이를 수행합니다.

>>> x = int(1)  
>>> NewStringVariable = str(x).zfill(3)  
>>> print NewStringVariable  
001  
>>> NewStringVariable = str(x).zfill(5)  
>>> print NewStringVariable  
00001 
+0

이 대답은 제 의견으로 받아 들여 져야만합니다. – FaCoffee

+0

이것은 "문자열"유형이 아니며 "정수"유형이 아닙니다. "TYPE"은 문맥에서 중요합니다. 새로운 변수가 "문자열 유형"이되기를 원한다면 좋은 접근법이지만 "정수"유형이 필요한 경우에는 no입니다. – Xonshiz

0

내 아두 이노에서 시리얼 라인을 통해 오는 hhmmss 같은 날짜 문자열을 얻고 있었다.

그래서 나는 s = "122041"을 얻었습니다. 이 값은 12:20:41이지만 9am090000이됩니다.

print "%d" % (s) 문은 9가 8 진수가 아니므로 런타임 오류가 발생하므로 잘못된 문자입니다.

이 문제를 해결하려면, 당신은이