Python 코드의 들여 쓰기를 중괄호로 변환하는 방법이 있습니까?


81

저는 파이썬을 배우고 싶은 완전히 맹목적인 프로그래머입니다. 불행히도 코드 블록이 서로 다른 수준의 들여 쓰기로 표현된다는 사실은 주요 걸림돌입니다. 중괄호 나 다른 코드 블록 구분 기호를 사용하여 코드를 작성한 다음 해당 형식을 Python 인터프리터가 사용할 수있는 적절한 들여 쓰기 표현으로 변환 할 수있는 도구가 있는지 궁금합니다.


궁금해서 어떤 운영 체제를 사용하고 있습니까?
Ryan

4
그러나 공백과 줄 바꿈이 문제가되는 이유는 무엇입니까? 텍스트 리더가 인쇄 할 수없는 문자를 표시하도록 할 수 없습니까?
e-satis

2
그것은 재앙의 비결처럼 보인다. 나는 각 줄 앞에 "우주 공간 공간 공간 공간 공간 공간 공간 정의 푸"를 듣고 싶어하는 사람들을 많이 모른다.
javawizard

@javawizard는 진술에 의해 일할 수있는 "데프 foo는 콜론, 다음 줄 들여 쓰기의 증가를 ..."또는 "들여 쓰기 레벨 0, 데프 foo는 콜론, 다음 줄 들여 쓰기 수준 1, ..."
smoothdeveloper

@smoothdeveloper 당연히, 그것이 포스터의 질문이 요구하는 것입니다.
javawizard

답변:


56

파이썬 자체와 함께 배포되는 문제에 대한 해결책이 있습니다. pindent.py, Windows 설치의 Tools \ Scripts 디렉토리에 있습니다 (내 경로는 C : \ Python25 \ Tools \ Scripts). 실행중인 경우 svn.python.org에서 가져와야하는 것처럼 보입니다 . Linux 또는 OSX.

블록이 닫힐 때 주석을 추가하거나 주석이 삽입되면 코드를 적절하게 들여 쓰기 할 수 있습니다. 다음은 명령을 사용하여 pindent에 의해 출력되는 코드의 예입니다.

pindent.py -c myfile.py

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

원본 위치 myfile.py:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
   else:
       print 'oops!'

pindent.py -r주석 (자세한 내용은 pindent.py의 헤더 참조)을 기반으로 올바른 들여 쓰기를 삽입하는 데 사용할 수도 있습니다. 이렇게 하면 들여 쓰기에 대해 걱정하지 않고 파이썬으로 코딩 할 수 있습니다.

예를 들어, pindent.py -r myfile.py다음 코드를 실행 하면 위 myfile.pypindent.py -c예제에서 생성 된 것과 동일한 적절한 들여 쓰기 (및 주석 처리) 코드로 다음 코드가 변환됩니다 .

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
# end if
else:
print 'oops!'
# end if
# end def foobar

어떤 솔루션을 사용하게되는지 알고 싶습니다. 추가 지원이 필요한 경우이 게시물에 의견을 남겨 주시면 도움을 드리겠습니다.


Downvote : 코드를 읽는 데 도움 이 수 있지만 작성하는 데 도움이되지 않습니다. 파이썬과 중첩을 나타 내기 위해 공백에만 의존하는 이와 같은 언어는 시각 장애인을위한 접근성과 관련하여 본질적으로 손상됩니다. pindent왼쪽 플러시 코드 (많은 블라인드 프로그래머가 선호하는 들여 쓰기 방식)에 대해 역을 수행하는 도구가 유용 할 수 있습니다. 더 유용한 from __future__ import braces것은 이스터 에그가 아닙니다.
David Hammen

1
@DavidHammen : 거기 이다 수행하는 도구의 반전 pindent.py -c; 그것은이다 pindent.py -r. Ryan은 이미 답변에서 언급했지만 명시적인 예를 추가하고 놓치기 어렵게 만들기 위해 편집했습니다. (또한, 나는 그렇게 명령 줄 옵션을 수정 : 그건 -r아니고 -d단지 주석을 제거한다.)
Ilmari 카로 넨

11

많은 파이썬 애호가들이 파이썬이 이런 식이고 공백으로 구분된다는 사실을 좋아하기 때문에 저는 개인적으로 현재 현재가 있는지 의심합니다.

그러나 실제로 접근성 문제로 생각한 적이 없습니다. 아마도 파이썬에 버그 보고서로 제출할 것입니까?

그러나 출력을 위해 스크린 리더를 사용한다고 가정합니다. 그러면 탭이 "보이지 않는"것처럼 보일까요? 점자 출력을 사용하면 읽기가 더 쉬울 수 있지만 이것이 얼마나 혼란 스러울 수 있는지 정확히 이해할 수 있습니다.

사실 이것은 나에게 매우 흥미 롭습니다. 이 작업을 수행 할 수있는 앱을 작성할 수있을만큼 충분히 알았 으면합니다.

여러분이 이미 직접 해본 적이 없거나 원치 않는 한, 확실히 버그 보고서에 넣을 것이라고 생각합니다.

편집 :로 또한 언급 에 의해 존 밀리 킨 도있다 PyBraces 당신에게 실행 가능한 해결책이 될 수 있으며 가능하다 해킹 받아야합니다 정확히 무엇을 할 수 코딩 기술에 함께 따라 (그리고 나는 그런 경우 희망 , 다른 사람이 사용할 수 있도록 공개)

편집 2 : 방금 파이썬 버그 추적기에 이것을보고했습니다.


9

맹인은 아니지만 Emacspeak에 대해 좋은 소식을 들었습니다 . 1998 년 8.0 릴리스 이후로 Python 모드 를 사용했습니다 (28.0 릴리스까지 올라간 것 같습니다!). 확실히 확인할 가치가 있습니다.


6

탭과 공백을 말하도록 편집기를 구성 할 수 있어야합니다. 표시 할 수 있다는 것을 알고 있습니다. . 대부분의 편집기에서 공백 있으므로이를 말할 수있는 접근성 옵션이 있어야합니다.

실패하면 pybraces있는데 , 이것은 실용적인 농담으로 작성되었지만 실제로는 약간의 작업으로 유용 할 수 있습니다.


2
그러나 특정 시점에서 탭에 의존하는 코드 블록의 위치를 ​​기억하는 것이 어려울 것이라는 사실을 생각해야합니다. 중괄호는 특정 시작 및 끝 마커를 표시하는 반면 탭에서는 혼란 스러울 수 있습니다 (혼란스럽고 눈에 띕니다!)
Mez

6

Windows를 사용하는 경우 http://empowermentzone.com/EdSharp.htm 에서 EdSharp를 살펴볼 것을 강력히 권장 합니다. 모든 주요 Windows 스크린 리더를 지원하며 코드의 들여 쓰기 수준을 말하도록 구성 할 수 있습니다. 또는 PyBrace라는 유틸리티가 내장되어 있습니다. 대신 중괄호 구문으로 변환 할 수 있으며, 프로그래머가 텍스트 편집기에서 기대하는 모든 종류의 다른 기능을 지원합니다. 나는 PHP에서 JavaScript, HTML, Python에 이르기까지 수년 동안 그것을 사용해 왔으며 그것을 좋아합니다.


나는 작년에 그것을 메인 에디터로 사용하고 있습니다.
Jared 2011

4

문제에 감사 드리지만 해결해야하는 문제 대신 구현을 지정하고 있다고 생각합니다. 중괄호로 변환하는 대신 스크린 리더가 들여 쓰기 수준을 알려주는 방법을 찾는 것은 어떻습니까?

예를 들어, 어떤 사람들 은 파이썬 들여 쓰기 수준을 나타 내기 위해 vim 구문 색상 지정 작업을했습니다. 아마도 수정 된 구문 색상이 화면 판독기에서 읽을 수있는 내용을 생성 할 수 있습니까?


"레벨 4 들여 쓰기"foo는 새 바와 같음 "레벨 3 들여 쓰기"혼란스럽고 마음 속에 그것을 추적해야하는 것은 추가적인 부담입니다.
Mez

1
"레벨 N 들여 쓰기", "in"대 "out"또는 "indent"대 "dedent"는 충분하지 않습니다. def foo (x) : indent return x * 2 dedent
kaleissin

4

이 모든 "당신은 할 수 없습니다"유형의 대답은 정말 짜증납니다. 물론 당신은 할 수.

해킹이지만 할 수 있습니다.

http://timhatch.com/projects/pybraces/

인터프리터에게 전달하기 전에 사용자 지정 인코딩을 사용하여 중괄호를 들여 쓰기 된 블록으로 변환합니다.


제쳐두고, 그리고 파이썬을 처음 접하는 사람으로서-나는 중괄호 / 일반 블록 구분 기호를 허용 하지 않는 이유를 받아들이지 않습니다 . 코드를 자동으로 처리하거나 공백이 중요하다는 것을 이해하지 못하는 편집기에서 작업하는 경우 중괄호는 우연히 먹히지 않습니다. 코드를 자동으로 생성하는 경우 들여 쓰기 수준을 추적 할 필요가 없습니다. 파이썬을 사용하여 perl-esque one-liner를 수행하려면 자동으로 불구가됩니다. 다른 것이 없다면 보호 수단으로. 1000 라인 파이썬 프로그램이 모든 탭을 먹으면 어떨까요? 줄 단위로 가서 들여 쓰기가 어디에 있어야하는지 알아 내겠습니까?

그것에 대해 물어 보면 "그냥 '다음 __부터 __ 중괄호 가져 오기'에서 ',", "IDE를 올바르게 구성하십시오", "어쨌든 익숙해 지도록하는 것이 더 낫습니다"와 같은 혀를 맞대고 대답 할 것입니다 ...

나는 그들의 요점을 알지만, 내가 원한다면 매 줄마다 세미콜론을 넣을 수 있습니다. 그래서 저는 왜 모든 사람들이 교정기에 대해 그렇게 단호한 지 이해하지 못합니다. 제대로 들여 쓰기를하기 위해 언어가 필요하다면 처음부터 제대로하는 것이 아닙니다.

내 2c-어쨌든 중괄호를 사용할 것입니다.


당신은 파이썬 쉘을 열고 다음을 입력합니다 :이 가져
ThatAintWorking

1
사실, 제 의견은 경험을 통해 흔들 렸습니다. 나는 파이썬이 내 프로젝트 중 하나의 요구 사항을 따르도록 강제하는 방법을 찾으려고했지만 설득을 통해 그렇게하는 것을 거부한다는 사실에 실망했습니다. 저는 다른 각도에서 왔고 파이썬이 아름답고 매우 협조적인 플랫폼이라는 것을 발견했습니다. 제가 배운 주된 교훈은 값싼 해킹과 컴퓨터가 잘 섞이지 않는다는 것입니다. 파싱 ​​알고리즘에 대해 심도있는 연구를해야했지만 제가 얻은 지식은 그만한 가치가 있습니다. 나는 여전히 들여 쓰기 /내어 쓰기를 신경 쓰지 않지만 존중합니다.
la11111

4

액세스 가능한 Python IDE를 검색 한 결과 이것을 발견하고 대답하기로 결정했습니다. JAWS가있는 Windows에서 :

  1. 자주 사용하는 텍스트 편집기에서 JawsKey+ 6(문자 위의 숫자 행) 를 눌러 설정 센터로 이동합니다 . JAWS가 새 구성 파일을 생성하라는 메시지를 표시하면 동의합니다.
  2. 검색 필드에 "indent"를 입력합니다.
  3. 결과는 "Say indent characters"입니다. 이것을 켜십시오.
  4. 즐겨!

우리를 실망시키는 유일한 점은 웹 사이트에서 코드 예제를 즐길 수 없다는 것입니다 (브라우저에서 들여 쓰기 말하기가 너무 편하지 않기 때문에 불필요한 음성을 생성합니다).

다른 Python 초보자의 즐거운 코딩).


3

나는 많은 경험을 가진 IDE이기 때문에 pydev 확장과 함께 eclipse를 사용합니다. 또한 if 문, 루프 등을 코딩하기 위해 제공하는 스마트 들여 쓰기에 감사드립니다. 현재 초점을 맞춘 파이썬 모듈에서 실행할 수있는 외부 도구로 pindent.py 스크립트를 구성했습니다. 끊임없이 들여 쓰기를 확인하지 않고 닫았습니다.


1

이를 수행하는 방법을 설명하는 다양한 답변이 있습니다. 그러나 나는이 길을 택하지 않는 것이 좋습니다. 스크립트를 사용하여 변환을 수행 할 수는 있지만 팀 프로젝트에서 작업하기가 어렵습니다.

내 권장 사항은 탭을 알리도록 화면 판독기를 구성하는 것입니다. "탭 탭 탭 탭 탭"이 아니라 "들여 쓰기 5"라고만 표시되기 때문에 소리만큼 귀찮지 않습니다. 또한 들여 쓰기는 변경 될 때마다 읽혀 지므로 들여 쓰기 수준을 듣지 않고도 전체 코드 블록을 살펴볼 수 있습니다. 이런 식으로 들여 쓰기를 듣는 것은 중괄호를 듣는 것보다 더 장황하지 않습니다.

사용하는 운영 체제 나 스크린 리더를 모르기 때문에 안타깝게도이를 달성하기위한 정확한 단계를 제공 할 수 없습니다.


0

Edsger 데이 크 스트라가 사용 ~ 경우 인터넷을 하고 ~ 외경을 그의 "지키고 명령 언어"에, 이들은에서 발생한 것으로 보인다 Algol68 . RosettaCode.org 에서 사용 된 파이썬 보호 블록 예제도 있습니다 .

fi = od = yrt = end = lambda object: None;
class MyClass(object):
    def myfunction(self, arg1, arg2):
        for i in range(arg1) :# do
            if i > 5 :# then
                print i
            fi
        od # or end(i) #
    end(myfunction)
end(MyClass)

공백으로 뭉친 파이썬 코드는 세미콜론 ";"과 함께 보호 된 블록 if / fi, do / od & try / yrt를 사용하면 명확하게 얽 히지 않고 다시 들여 쓰기 될 수 있습니다. 문을 분리합니다. 명확한 잡지 목록 또는 웹 페이지에서 잘라 내기 / 붙여 넣기에 탁월합니다.

가드 블록과 세미콜론을 삽입 / 제거하는 짧은 파이썬 프로그램을 작성하는 것은 충분히 쉬울 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.