2013-03-07 2 views
4

텍스트 파일을 열고 텍스트의 각 문자를 오른쪽으로 5 문자 이동하는 프로그램을 작성하려고합니다. 영숫자 문자의 경우에만이 작업을 수행해야하며 영숫자 이외의 문자는 그대로 두십시오. (예 : C가 H가 됨) ASCII 테이블을 사용하여이 작업을 수행해야하는데 문자가 줄 바꿈 될 때 문제가 발생합니다. 예 : w는 b가되어야하지만, 내 프로그램은 ASCII 테이블에있는 문자를 제공합니다. 내가 가지고있는 또 다른 문제는 모든 문자가 별도의 줄에 인쇄되어 있고 모두 같은 줄에 인쇄하고 싶습니다. 목록이나 사전을 사용할 수 없습니다.파일의 줄을 암호화하는 중

이 내가 무엇을, 난, 문

def main(): 
    fileName= input('Please enter the file name: ') 
    encryptFile(fileName) 


def encryptFile(fileName): 
    f= open(fileName, 'r') 
    line=1 
    while line: 
     line=f.readline() 
     for char in line: 
      if char.isalnum(): 
       a=ord(char) 
       b= a + 5 
       #if number wraps around, how to correct it 
       if 

       print(chr(c)) 
      else: 
       print(chr(b)) 
     else: 
      print(char) 
+1

안녕하세요, % 연산자는 포장에 사용할 수 있습니다 예를 들어 x = y로 나누면 나머지는 0 % 2 = 1, 0 1 % 2 = 1, 2 % 2 = 0, 3 % 2 = 1, ... % 5를 추가 한 후 z = 25 및 % 26 – Patashu

답변

7

str.translate를 사용 : 당신이 라인을 통해 반복보다는 f.readline() 사용 있도록

이 코드에 넣어 (나는 또한 그것을 변경

In [24]: import string 

In [25]: string.uppercase 
Out[25]: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 

In [26]: string.uppercase[5:]+string.uppercase[:5] 
Out[26]: 'FGHIJKLMNOPQRSTUVWXYZABCDE' 

In [27]: table = string.maketrans(string.uppercase, string.uppercase[5:]+string.uppercase[:5]) 

In [28]: 'CAR'.translate(table) 
Out[28]: 'HFW' 

In [29]: 'HELLO'.translate(table) 
Out[29]: 'MJQQT' 
+0

그리고 숫자와 소문자로 사용하려면 string.lowercase + string.digits를 참조하십시오 –

+0

정답 @unutbu –

1

첫 번째 경우 최종 작업을 수행하는 방법 확실하지 않다가 낮거나 대문자 인 경우가 중요. 나는 ASCII에서 w

if b>122: 
    b=122-b #z=122 
    c=b+96 #a=97 

= 119 및 z = 122 (ASCII의 진수를) (그렇지 않은 경우, 그들을 만들 수있을만큼 쉬운 것입니다) 여기에 모든 문자임을 낮은 경우를 가정 할 것입니다 그래서 우리의 새로운 b 인 119 + 5 = 124와 124-122 = 2, 우리는 이것을 a-1에 더한다. (이것은 1을 되 찾으면 2 + 96 = 98이고 98은 b이다.)

당신이 그 (것)이있을 때, 나는 목록에 작성합니다 대신 인쇄의 같은 줄에 인쇄의

은, 그 목록에서 문자열을 만들 수 있습니다.

예를 들어, 대신

,691,363 (210)
print(chr(c)) 
else: 
    print(chr(b)) 

나는

 someList.append(chr(c)) 
else: 
    somList.append(chr(b)) 

다음 하나 개의 문자열에 함께리스트의 각 요소를 결합 할 것이다.

+0

예 대문자 대 소문자로이 문제를 인식했습니다. 그것은 둘 중 하나 일 수 있으므로 C는 H를 반환하고 C는 H를 반환합니다. 그 충고는? – tinydancer9454

+0

나는 unutbu가 준 답을 보았습니다. 당신은 대문자와 소문자로 쓸 수 있습니다. 더 컴팩트 한 것 같습니다 : – NightHallow

0

당신은 dictionary 그것을 처리하기 위해 만들 수 있습니다

import string 
s = string.lowercase + string.uppercase + string.digits + string.lowercase[:5] 
encryptionKey = {s[i]:s[i+5] for i in range(len(s)-5)} 

s (+ string.lowercase[:5])에 마지막 가수는 키에 처음 5 개 글자를 추가합니다. 그런 다음 간단한 사전 이해를 사용하여 암호화 키를 만듭니다.

import string 
def main(): 
    fileName= input('Please enter the file name: ') 
    encryptFile(fileName) 


def encryptFile(fileName): 
    s = string.lowercase + string.uppercase + string.digits + string.lowercase[:5] 
    encryptionKey = {s[i]:s[i+5] for i in range(len(s)-5)} 
    f= open(fileName, 'r') 
    line=1 
    for line in f: 
     for char in line: 
      if char.isalnum(): 
       print(encryptionKey[char]) 
      else: 
       print(char) 
관련 문제