2017-05-11 2 views
2

암호문을 같은 줄에 인쇄하려고합니다. 프로그램을 실행할 때 모든 문자가 다음 행에 인쇄됩니다. 어떻게해야합니까? 당신이 실제로 문자열의 chr(65)의 유형을 보면같은 줄에 문자를 어떻게 인쇄합니까?

#!/usr/bin/env python3 

import cs50 
import sys 

def main(): 

    if len(sys.argv) != 2: 
     print('caesar.py k') 
     exit(1) 

    k = int(sys.argv[1]) 

    print('plaintext: ', end = '') 

    s = cs50.get_string() 

    print('ciphertext: ', end = '') 

    for i in range(len(s)): 

     c = s[i] 

     if str.isupper(c): 
      cipher = (((ord(c) - 65) + k) % 26) + 65 
      print(chr(cipher)) 
     elif str.islower(c): 
      cipher = (((ord(c)- 97) + k) % 26) + 97 
      print(chr(cipher)) 
     else: 
      print(chr(c)) 

    exit(0) 


if __name__ == "__main__": 
    main() 

답변

2

오류가

c - chr(65) 

에서 온다.

>>> type(chr(65)) 
str 

TypeError는 다른 문자열에서 문자열을 뺄 수 없다는 것을 알려주는 것입니다.

대신 문자의 유니 코드 코드 포인트를 나타내는 정수를 반환하는 ord을 사용하는 것이 좋습니다.

는 또한
for i in range(len(s)): 

    c = s[i] 

는 파이썬 안티 패턴과 S는 반복 가능한

+0

한 가지를 놓쳤습니다. "같은 줄에 문자를 어떻게 인쇄합니까?" :디 – rbaleksandar

1

걱정없는 단지

for c in s: 
    print(c) # c is your character 

때문에 WTH을 단순화 할 수있다, 나는이 대답했다. print 문 끝 부분에 end = ''을 추가했습니다.

0

@ Jack Evans는 최고의 스타일이라고 생각합니다. 문자열 인 상태

./name_of_file 3 

: 여기

#!/usr/bin/env python3 
import cs50 
import sys 

def main(): 

    if len(sys.argv) != 2: 
     print('caesar.py k') 
     exit(1) 

    k = int(sys.argv[1]) 

    print('plaintext: ', end = '') 
    s = cs50.get_string() 
    print(s) 

    print('ciphertext: ', end = '') 

    for i in range(len(s)): 

     c = s[i] 

     if str.isupper(c): 
      cipher = (((ord(c) - 65) + k) % 26) + 65 
      print(chr(cipher), end= '') 
     elif str.islower(c): 
      cipher = (((ord(c)- 97) + k) % 26) + 97 
      print(chr(cipher), end= '') 
     else: 
      print(chr(c), end= '')   
    print() 
    exit(0) 

if __name__ == "__main__": 
    main() 

사람이 같은 스크립트를 실행하는 경우 예를 들어, 출력 : 그러나 관심을 나는 (희망) 귀하의 질문에 대답하는 데 도움이되는 몇 가지 수정을했습니다 :

howdy 

결과는 다음과 같습니다

plaintext: howdy 
ciphertext: krzgb 
,

것은 방금 변경, 직접 질문 인쇄 암호 문자가 같은 줄에 인쇄하도록에 대답하기 : 지정하지 않고 인쇄()를 사용하여,

print(chr(cipher)) 

파이썬에서
print(chr(cipher), end= '') 

에 어떻게 인쇄해야 끝내면 자동으로 개행 문자로 끝납니다. 제공된 버전에서 볼 수 있듯이이 아이디어를 사용하여 개행을 쉽게 통합 할 수 있습니다.

건배

관련 문제