대부분의 코드 예제는 대화형 인터프리터를 사용했으며 짧았습니다. 이제 데이터뿐만 아니라 Python 코드 구조화 방법에 대해 알아보겠습니다.
많은 컴퓨터 언어는 코드 섹션을 표시하기 위해 중괄호({ 및 })와 같은 문자 또는 시작 및 끝과 같은 키워드를 사용합니다. 이러한 언어에서는 일관된 들여쓰기를 사용하여 자신과 다른 사용자가 프로그램을 더 잘 읽을 수 있도록 하는 것이 좋습니다. 코드 라인업을 깔끔하게 할 수 있는 도구도 있습니다.
그가 파이썬이 된 언어를 디자인할 때 Guido van Rossum은 들여쓰기 자체만으로도 프로그램의 구조를 정의하기에 충분하다고 판단하고 모든 괄호와 곱슬곱슬한 중괄호를 입력하는 것을 피했다. Python은 프로그램 구조를 정의하기 위해 이렇게 공간을 사용하는 경우는 흔하지 않습니다. 신입들이 가장 먼저 주목하는 부분 중 하나이며, 다른 언어를 접해본 경험이 있는 사람들에게는 이상하게 보일 수 있다. 알고 보니 Python을 잠시 쓰고 나면 자연스럽고 더 이상 눈치채지 못하게 된다. 더 적게 타이핑하면서 더 많은 것을 하는 것에 익숙해지기도 합니다.
Comment with #
주석은 프로그램에서 Python 해석기에서 무시되는 텍스트입니다. 주석을 사용하여 근처의 Python 코드를 명확히 하거나, 언젠가 수정하기 위해 스스로 메모를 하거나, 원하는 목적을 위해 메모를 할 수 있습니다. # 문자를 사용하여 설명을 표시하면 해당 시점부터 현재 줄 끝까지 모두 설명의 일부입니다. 일반적으로 다음과 같이 줄 자체에 설명이 표시됩니다.
>>> # 60 sec/min * 60 min/hr * 24 hr/day
>>> seconds_per_day = 86400
또는 코드와 같은 줄에 다음과 같이 언급합니다.
>>> seconds_per_day = 86400 # 60 sec/min * 60 min/hr * 24 hr/day
캐릭터는 해시, 샤프, 파운드 또는 사악한 옥토 소프의 여러 이름을 가집니다.1 당신이 뭐라고 부르든, 2의 효과는 그것이 나타나는 선의 끝까지만 지속됩니다.
Python에는 여러 줄의 설명이 없습니다. #로 각 주석 줄 또는 섹션을 명시적으로 시작해야 합니다.
>>> # I can say anything here, even if Python doesn't like it, ... # because I'm protected by the awesome
... # octothorpe.
...
>>>
그러나 텍스트 문자열에 있는 경우 강력한 옥토소프는 일반 # 문자 역할로 돌아갑니다.
>>> print("No comment: quotes make the # harmless.") No comment: quotes make the # harmless.
Continue Lines with \
줄이 상당히 짧을 때 프로그램을 더 잘 읽을 수 있습니다. 권장(필수는 아님) 최대 행 길이는 80자입니다. 하고 싶은 말을 다 할 수 없는 경우에는 연속 문자 \(백슬래시)를 사용할 수 있습니다. 줄 끝에 \를 붙이면 Python이 갑자기 같은 줄에 서 있는 것처럼 행동합니다.
예를 들어, 작은 문자열로 긴 문자열을 작성하려면 다음과 같은 단계를 거치면 됩니다.
>>> alphabet = ''
>>> alphabet += 'abcdefg'
>>> alphabet += 'hijklmnop'
>>> alphabet += 'qrstuv'
>>> alphabet += 'wxyz'
또는 연속 문자를 사용하여 한 번에 수행할 수 있습니다.
>>> alphabet = 'abcdefg' + \
- ... 'hijklmnop' + \
- ... 'qrstuv' + \
- ... 'wxyz'
Python 식이 여러 줄로 확장되는 경우에도 줄 연속성이 필요합니다.
>>>1+2+
File "<stdin>", line 1
1+2+ ^
SyntaxError: invalid syntax >>>1+2+\
... 3
6
>>>
Compare with if, elif, and else
지금까지 포스팅에서 우리는 거의 전적으로 데이터 구조에 대해 이야기했습니다. 이제 데이터를 프로그램으로 엮는 코드 구조에 첫 발을 내디뎠습니다(세트에 관한 이전 장의 섹션에서 이러한 내용을 미리 볼 수 있습니다). 지속적인 피해가 없었으면 좋겠다.) 첫 번째 예는 부울 변수 재해의 값을 확인하고 적절한 주석을 인쇄하는 작은 Python 프로그램입니다.
>>> disaster = True >>> if disaster:
... print("Woe!") ... else:
... print("Whee!") ...
Woe!
>>>
if 및 else 행은 조건(여기서 재해 값)이 True인지 여부를 확인하는 Python 문입니다. Print()는 일반적으로 화면에 인쇄하는 Python의 내장 기능입니다.
다른 언어로 프로그래밍한 경우에는 if 테스트에 괄호가 필요하지 않습니다. 만약(재앙 == 진실) 같은 말은 하지 마라. 끝에 콜론(:)이 필요합니다. 나처럼 가끔 콜론을 입력하지 않으면 Python이 오류 메시지를 표시합니다.
각 인쇄() 라인은 테스트 아래에 들여씁니다. 네 칸을 이용해서 각 부문을 들여보냈지 원하는 모든 들여쓰기를 사용할 수 있지만 Python은 섹션 내의 코드에 일관성을 유지해야 합니다. 왼쪽 줄에 있는 줄에 같은 양을 들여써야 합니다. PEP-8이라고 불리는 권장 스타일은 네 개의 공간을 사용하는 것입니다. 탭을 사용하거나 탭과 공백을 섞지 마십시오. 들여쓰기 카운트를 망칩니다.
여기서는 여러 가지 작업을 수행했습니다. 챕터가 진행됨에 따라 자세히 설명하겠습니다.
• Disaster라는 변수에 True 부울 값 할당
• 재해의 가치에 따라 다른 코드를 실행하고 if와 other를 사용하여 조건부 비교 수행
• 일부 텍스트를 인쇄하기 위해 인쇄() 함수 호출
필요한 만큼 깊이 있는 테스트를 테스트 내에서 수행할 수 있습니다.
- >>> furry = True
>>> small = True
>>> if furry:
... if small:
... print("It's a cat.") ... else: - ... print("It's a bear!") ... else:
... if small:
... print("It's a skink!") ... else:
... print("It's a human. Or a hairless bear.") ...
It's a cat.
Python에서 들여쓰기는 if 섹션과 다른 섹션의 쌍을 지정하는 방법을 결정합니다. 우리의 첫 번째 테스트는 털을 확인하는 것이었다. 털북숭이가 사실이기 때문에, Python은 작으면 움푹 들어간 곳으로 간다. 작으면 True로 설정했기 때문에 작으면 True로 평가됩니다. 그래서 Python은 다음 줄을 실행시켜서 인쇄하게 됩니다. 고양이입니다.
테스트할 수 있는 가능성이 세 개 이상인 경우, elif(다른 경우 의미) 및 다음을 사용합니다.를 사용합니다.
>>> color = "puce"
>>> if color == "red":
... print("It's a tomato")
... elif color == "green":
... print("It's a green pepper")
... elif color == "bee purple":
... print("I don't know what it is, but only bees can see it") ... else:
... print("I've never heard of the color", color)
...
I've never heard of the color puce
앞의 예에서는 == 연산자와 동일한지 테스트했습니다. Python의 비교 연산자는 다음과 같습니다.
equality == inequality != less than <
less than or equal <= greater than > greater than or equal >= membership in ...
그러면 부울 값이 True 또는 False로 반환됩니다. 이 모든 기능이 어떻게 작동하는지 살펴보겠습니다. 먼저 x에 값을 할당합니다.
>>>x=7
이제 몇 가지 테스트를 해보겠습니다.
>>>x==5 False >>>x==7 True >>>5<x True >>>x<10 True
동일성을 검정하는 데 두 등호(==)가 사용됩니다. 단일 등호(=)는 변수에 값을 할당하는 데 사용됩니다.
동시에 여러 번 비교해야 하는 경우 부울 연산자를 사용하고 최종 부울 결과를 결정하지 않습니다.
부울 연산자는 비교 중인 코드 청크보다 우선 순위가 낮습니다. 즉, 덩어리를 먼저 계산한 다음 비교한다는 뜻입니다. 이 예에서는 xx를 7,5 < x로 설정하고 x < 10도 True로 계산하기 때문에 최종적으로 True와 True를 사용합니다.
>>>5<xandx<10 True
이전내용의 "우선 순위"가 지적하듯이, 우선순위에 대한 혼란을 피하는 가장 쉬운 방법은 괄호를 추가하는 것입니다.
>>>(5<x)and(x<10) True
다음은 몇 가지 다른 테스트입니다.
>>>5<xorx<10 True >>>5<xandx>10 False >>>5<xandnotx>10 True
하나의 변수를 사용하여 다중 비교를 수행하는 경우 Python을 사용하면 다음과 같은 작업을 수행할 수 있습니다.
>>>5<x<10 True
5<x>와 10<x>와 같습니다. 더 긴 비교를 작성할 수도 있습니다.
>>>5<x<10<999
True
무엇이 진실인가?
우리가 검사하는 요소가 부울이 아니라면요? Python에서 True와 False로 간주하는 것은 무엇입니까?
거짓 값이 반드시 False일 필요는 없습니다. 예를 들어, 다음 항목은 모두 False로 간주됩니다.
boolean False null None zero integer 0
zero float 0.0 empty string '' empty list [] empty tuple () empty dict {} empty set set()
다른 모든 것은 사실로 간주됩니다. Python 프로그램은 이 "truthiness"(또는 이 경우 "false") 정의를 사용하여 빈 데이터 구조와 False 조건을 확인합니다.
>>> some_list = []
>>> if some_list:
... print("There's something in here") ... else:
... print("Hey, it's empty!")
...
Hey, it's empty!
테스트하는 것이 단순 변수가 아닌 표현식인 경우 Python은 표현식을 평가하고 부울 결과를 반환합니다. 따라서 다음을 입력하면 됩니다.
if color == "red":
Python은 색상 == "빨간색"을 평가합니다. 이 예에서는 puce라는 문자열을
color == "red"는 False이고 Python은 다음 테스트로 이동합니다.
elif color == "green":
Repeat with while
위에서 아래로 실행되는지, 엘프 또는 다른지를 사용하여 테스트합니다. 가끔, 우리는 한 번 이상 무언가를 해야 합니다. 우리는 루프가 필요합니다. 파이썬의 가장 간단한 루핑 메커니즘은 while입니다. 대화형 인터프리터를 사용하여 다음 예제를 시도해 보십시오. 1에서 5까지의 숫자를 인쇄하는 간단한 루프입니다.
>>> count = 1
>>> while count <= 5: ... print(count) ... count += 1 ...
1
2
3
4
5
>>>
우리는 먼저 셀 값 1을 할당했습니다. 반면 루프는 카운트의 값을 5와 비교하고 카운트가 5보다 작거나 같으면 계속했습니다. 루프 내부에서 count 값을 출력한 다음 count + = 1 문장으로 값을 1씩 증가시켰습니다. Python은 루프의 맨 위로 돌아가서 카운트를 다시 5와 비교합니다. count 값이 2가 되므로 while loop의 내용이 다시 실행되어 count가 3으로 증가합니다.
이는 루프 하단에서 카운트가 5에서 6으로 증가할 때까지 계속됩니다. 다음 번에 맨 위로 이동할 때 카운트 = 5가 이제 False가 되고 while 루프가 종료됩니다. Python은 다음 행으로 넘어갑니다.
Cancel with break
문제가 발생할 때까지 루프를 수행하려고 하지만 언제 발생할지 확신할 수 없는 경우 중단 문과 함께 무한 루프를 사용할 수 있습니다. 이번에는 Python의 입력() 함수를 통해 키보드의 입력 줄을 읽고 첫 글자를 대문자로 인쇄하겠습니다. 문자 q만 포함된 줄을 입력하면 루프가 해제됩니다.
>>> while True:
… stuff = input(“string to capitalize [Type q quit]: “)
... it stuff == “q” :
... brake
... print(stuff.capitalize())
String to capitalize [type q to quit]: test
Test
String to capitalize [type q to quit]: hey, it works
Hey, it works
String to capitalize [type q to quit]: q
>>>
stuff = input("String to capitalize [type q to quit]: ")
Skip Ahead with continue
때로는 루프에서 벗어나고 싶지 않고 어떤 이유로든 다음 반복으로 건너뛰고 싶을 때가 있습니다. 다음은 계획된 예입니다. 정수를 읽고, 정사각형이 홀수이면 인쇄하고, 짝수이면 건너뜁시다. 댓글 몇 개 달았어요. 다시 q를 사용하여 루프를 중지합니다.
>>> while True:
Integer, please [q to quit]: 1 1 squared is 1
value = input("Integer, please [q to quit]: ") if value == 'q': # quit
break
number = int(value)
if number % 2 == 0: # an even number
continue
print(number, "squared is", number*number)
Integer, please [q to quit]: 2 Integer, please [q to quit]: 3 3 squared is 9
Integer, please [q to quit]: 4 Integer, please [q to quit]: 5 5 squared is 25
Integer, please [q to quit]: q
>>>
Iterate with for
Python은 그럴듯한 이유로 반복기를 자주 사용합니다. 데이터 구조의 크기나 구현 방법을 알지 못한 채 데이터 구조를 이동할 수 있습니다. 즉석에서 생성된 데이터 위에 반복할 수도 있으므로, 그렇지 않으면 컴퓨터 메모리에 맞지 않는 데이터 스트림을 한 번에 처리할 수 있습니다.
다음과 같은 시퀀스를 밟는 것은 합법적인 Python입니다.
>>> rabbits = ['Flopsy', 'Mopsy', 'Cottontail', 'Peter'] >>> current = 0
>>> while current < len(rabbits):
... print(rabbits[current])
... current += 1
...
Flopsy
Mopsy
Cottontail
Peter
하지만 더 좋은, 더 피토닉한 방법이 있다.
>>> for rabbit in rabbits: ... print(rabbit)
...
Flopsy
Mopsy
Cottontail
Peter
토끼와 같은 목록은 문자열, 튜플, 사전, 세트 및 기타 일부 요소와 함께 Python에서 쉽게 사용할 수 있는 개체 중 하나입니다. 튜플 또는 목록 반복은 한 번에 항목을 생성합니다. 문자열 반복은 다음과 같이 한 번에 문자를 생성합니다.
>>> word = 'cat'
>>> for letter in word: ... print(letter) ...
c
a
t
사전(또는 해당 키() 함수) 위에 반복하면 키가 반환됩니다. 이 예제에서 키는 보드 게임 Clou(북미 이외의 클루도)에 있는 카드 유형입니다.
>>> accusation = {'room': 'ballroom', 'weapon': 'lead pipe',
'person': 'Col. Mustard'}
>>> for card in accusation: # or, for card in accusation.keys(): ... print(card)
...
room
weapon
person
키 대신 값을 반복하려면 사전의 값() 함수를 사용합니다.
>>> for value in accusation.values(): ... print(value)
...
ballroom
lead pipe
Col. Mustard
튜플의 키와 값을 모두 반환하려면 다음과 같은 항목() 함수를 사용합니다.
>>> for item in accusation.items(): ... print(item)
...
('room', 'ballroom')
('weapon', 'lead pipe')
('person', 'Col. Mustard')
한 번에 튜플에 할당할 수 있습니다. 항목()으로 반환되는 각 튜플에 대해 첫 번째 값(키)을 카드에 할당하고 두 번째 값(값)을 내용에 할당합니다.
>>> for card, contents in accusation.items():
... print('Card', card, 'has the contents', contents) ...
Card weapon has the contents lead pipe
Card person has the contents Col. Mustard
Card room has the contents ballroom
Cancel with break
잠시 동안처럼 a 루프의 중단이 루프를 벗어나게 됩니다.
Skip with continue
for 루프에 계속을 삽입하면 잠시 동안처럼 루프의 다음 반복으로 점프합니다.
Check break Use with else
for에는 정상적으로 완료되었는지 여부를 확인하는 다른 옵션이 있습니다. break가 호출되지 않은 경우 다른 문이 실행됩니다.
이 기능은 루프의 이전 항목이 중단으로 조기에 중지되는 대신 완료로 실행되었는지 확인하려는 경우에 유용합니다. 다음 예제의 for 루프에는 치즈의 이름이 인쇄되어 있으며 치즈 가게에서 치즈가 발견되면 파손됩니다.
>>> cheeses = []
>>> for cheese in cheeses:
... print('This shop has some lovely', cheese)
... break
... else: # no break means no cheese
... print('This is not much of a cheese shop, is it?') ...
This is not much of a cheese shop, is it?