u를 붙여야 함u"안녕하세요"print "Hello World"print가 함수로 변경되어 괄호와 함께 사용print("Hello World")/ 연산자는 항상 부동 소수점 결과를 반환하고, // 연산자는 정수 결과를 반환async와 await 키워드를 도입하여 비동기 프로그래밍을 네이티브로 지원2to3과 같은 도구를 사용 필요보안 자동화 도구
취약점 스캔 및 분석
포렌식 및 사고 대응
네트워크 보안
정기적 포트 스캔 결과 통보
보안 이슈 자동화 트위터 크롤링
엑셀 결과를 워드 파일 상세 보고서로 자동화
number = 10
name = "Alice"
print(number)
print(name)
age = 30 # 정수
temperature = 36.5 # 부동소수점
is_valid = True # 불리언
| 데이터 타입 범주 | 데이터 타입 |
|---|---|
| 텍스트 타입 | str |
| 숫자 타입 | int, float, complex |
| 시퀀스 타입 | list, tuple, range |
| 매핑 타입 | dict |
| 집합 타입 | set, frozenset |
| 불리언 타입 | bool |
| 바이너리 타입 | bytes, bytearray, memoryview |
| None 타입 | NoneType (표현은 None) |
정수형 (Integer, int)
age = 25
temperature = -5
print(age)
print(temperature)
부동소수점수 (Floating-point, float)
height = 175.5
weight = 65.3
print(height)
print(weight)
문자열 (String, str)
name = "John"
greeting = 'Hello, World!'
print(name)
print(greeting)
불리언 (Boolean, bool)
is_student = True
is_sunny = False
print(is_student)
print(is_sunny)
리스트, 튜플, 딕셔너리 등 다양한 타입은 뒤에서 학습하면서 다룰 예정
type() 함수의 사용은 변수나 값의 데이터 타입을 확인하는 데 매우 유용type() 함수는 코드에서 예상치 못한 타입 관련 오류를 디버깅할 때 특히 유용number = 42
print(type(number)) # 출력: <class 'int'>
text = "Hello, World!"
print(type(text)) # 출력: <class 'str'>
flag = True
print(type(flag)) # 출력: <class 'bool'>
str() 함수는 파이썬에서 제공하는 내장 함수로, 정수, 실수, 리스트, 튜플 등 다양한 데이터 타입을 문자열 형태로 변환number = 100
text = str(number)
print(text) # 출력: "100"
int() 함수는 문자열 형태의 숫자나, 실수를 정수형으로 변환ValueError 오류를 발생string_number = "123"
real_number = int(string_number)
print(real_number) # 출력: 123
float_number = 3.14
integer_number = int(float_number)
print(integer_number) # 출력: 3
float() 함수는 문자열이나 정수 등을 실수형(float)으로 변환ValueError 오류를 발생int_number = 10
float_from_int = float(int_number)
print(float_from_int) # 출력: 10.0
string_number = "3.14159"
float_from_string = float(string_number)
print(float_from_string) # 출력: 3.14159
ValueError를 발생try...except 구문을 사용try:
user_input = "a123"
number = int(user_input)
except ValueError:
print("입력 값이 정수로 변환될 수 없습니다.")
try...except 구문은 파이썬에서 예외 처리를 위해 사용되는 구문try:
# 실행할 코드
except ErrorType:
# 에러가 발생했을 때 실행할 코드
a-z, A-Z), 밑줄(_), 숫자(0-9)를 포함 가능1name은 유효하지 않지만, name1은 유효Age, age, AGE는 모두 다른 변수로 인식if, for, class 등의 예약어를 변수 이름으로 사용할 수 없음my_name, student_ageMyClass, DataProcessorMAX_SPEED, TOTAL# 좋은 예
username = "admin"
user_id = 1001
# 나쁜 예
2nd_user = "bob" # 숫자로 시작할 수 없습니다.
user-name = "alice" # 하이픈(-)은 변수명에 사용할 수 없습니다.
global = "value" # 'global'은 파이썬의 예약어입니다.
print("파이썬 웰컴")
print("파이썬", "웰컴", "python")
print("파이썬 \n", "웰컴\n")
print('파이썬 "매우" 웰컴')
print(""" 굉장히 긴 문자열입니다.........
파이썬 화이팅
파이썬자동화
""")
name = input("이름을 입력하세요.")
phone = input("번호를 입력하세요.")
age = input("나이를 입력하세요.")
print(name)
print(phone)
print(name, "의 전화번호는", phone, "입니다.", "나이는", age)
#print(type(name))
#print(type(phone))
아래의 + 와 , 는 다른 의미임
num1 = input("첫번째 숫자")
num2 = 2
str1 = "조정원"
print(str1 + num1)
print(str1, num2)
print(type(str1+num1))
파이썬에서 사용되는 이스케이프 코드(Escape Codes)는 문자열 내에서 특정 문자를 표시하거나 특수 문자를 삽입할 때 사용
| 이스케이프 코드 | 설명 | 예시 |
|---|---|---|
\\ | 백슬래시 문자 | \\ → \ |
\' | 작은따옴표 | \' → ' |
\" | 큰따옴표 | \" → " |
\n | 줄바꿈 (개행) | Hello\nWorld → HelloWorld |
\t | 탭 | Hello\tWorld → Hello World |
\r | 캐리지 리턴 | Hello\rWorld → World |
\b | 백스페이스 | Hello\bWorld → HellWorld |
\f | 폼 피드 (페이지 나누기) | 텍스트 페이지 나누기 |
\a | 벨 (경고음) | 소리 발생 (일부 환경에서만) |
\v | 수직 탭 | 수직으로 탭 |
\0 | 널 문자 | 문자열 끝을 표시하는 데 사용 |
\ooo | 8진수 값 | \101 → A |
\xhh | 16진수 값 | \x41 → A |
% 연산자, .format() 메소드, 그리고 f-string에 대해 자세히 배울 예정% 연산자를 이용한 포맷팅name = "조정원"
print("내 이름은 %s입니다." % name)
% 연산자 뒤에 나오는 튜플 (name, age)의 각 요소로 대체name = "조정원"
age = 20
print("내 이름은 %s이고 나이는 %d살입니다." % (name,age))
format() 메서드를 이용한 포맷팅{}를 플레이스홀더로 사용하여 이 플레이스홀더들은 .format()에 전달된 인자로 대체name = "조정원"
age = 20
print("내 이름은 {}이고 나이는 {}살입니다.".format(name,age))
name = "조정원"
age = 20
print("내 이름은 {}이고 나이는 {}살입니다.".format(age,name))
print("내 이름은 {1}이고 나이는 {0}살입니다.".format(age,name))
name = "조정원"
age = 20
print("내 이름은 {n}이고 나이는 {a}살입니다.".format(a=age,n=name))
f를 붙여 포맷 문자열 리터럴을 나타냄{} 안에 직접 변수 name을 삽입하여, Python이 이를 name 변수의 값인 "김태영"으로 대체name = "조정원"
age = 20
print(f"내 이름은 {name}이고 나이는 {age}살입니다.")
결론적으로 3가지 방식으로 출력이 가능하나, f-string을 사용한다.
name = input("이름을 입력")
phone = input("번호를 입력")
age = int(input("나이를 입력"))
print(name, "의 전화번호는", phone, "입니다.", "나이는", age)
print("내 이름은 {}이고 나이는 {}살입니다.".format(name,age))
print(f"내 이름은 {name}이고 나이는 {age}살입니다.")
print(type(name))
print(type(age))
다시 설치할 때
pip uninstall googletrans==3.1.0a0 (나중에 필요 없음)
pip install deep_translator
from deep_translator import GoogleTranslator
input_text = input("한글을 입력하세요. ")
translated = GoogleTranslator(source='ko', target='en').translate(input_text)
print(f"입력한 한글 : {input_text}")
print(f"번역된 영어: {translated}")
names = ['조정원', '홍길동', '김씨']
for name in names:
print(name)
print(len(names)) #길이
for i in range(3):
print(i)
for i in range(len(names)):
print(f"{i+1}번째: {names[i]}")
enumerate 내장 함수를 이용하여 인덱스와 값을 한번에 가져오기
for i,name in enumerate(names):
print(f"{i+1}번째: {name}")
names = ['조정원', '홍길동', '김씨']
ages = [23, 24, 25]
for index, name in enumerate(names):
age = ages[index]
print(f"이름: {name}의 나이는: {age}")
zip 함수는 두 개 이상의 시퀀스(리스트, 튜플 등)를 병렬로 순회할 수 있도록 묶어주는 파이썬의 내장 함수
names = ['조정원', '홍길동', '김씨']
ages = [23, 24, 25]
for name, age in zip(names, ages):
print(f"이름: {name}의 나이는: {age}")
my_list = [10, 20, 30, 40, 50]
my_list[1] = 25 # 두 번째 요소 값을 25로 수정
print(my_list) # 결과: [10, 25, 30, 40, 50]
my_list[4] = 100 # 다섯 번째 요소 값을 100으로 수정
print(my_list) # 결과: [10, 25, 30, 40, 100]
+ 연산자를 사용하는 것은 두 개 이상의 리스트를 결합하여 새로운 리스트를 생성하는 방법old_list = [5, 6, 7]
new_list = [1, 2, 3, 4]
result = a + new_list
print(result) # 출력: [5, 6, 7, 1, 2, 3, 4]
numbers.append(6) # 리스트 끝에 6 추가
print(numbers)
numbers.insert(1, 9) # 인덱스 1에 9 삽입
print(numbers)
numbers.remove(9) # 값 9 삭제
print(numbers)
del numbers[0] # 첫 번째 요소 삭제
print(numbers)
index() 메서드는 리스트에서 특정 요소의 위치를 찾는 데 사용
list.index(element) 형태로 사용되며, 여기서 element는 리스트에서 찾고자 하는 요소
# 리스트 생성
my_list = [10, 20, 30, 40, 50]
# 특정 요소의 위치 찾기
element = 30
index = my_list.index(element)
print(f"{element}의 위치는 {index}입니다.")
수업 때 예제
scores = [80, 90, 100, 70, 50, 40]
scores.append(110)
print(scores)
scores.insert(2, 80)
print(scores)
scores.remove(90)
print(scores)
del scores[1]
| 함수 | 설명 | 예시 |
|---|---|---|
append(x) | 리스트의 끝에 요소 x를 추가 | lst.append(4) |
extend(iterable) | iterable의 모든 항목을 리스트에 추가 | lst.extend([4, 5]) |
insert(i, x) | 지정한 위치 i에 요소 x를 삽입 | lst.insert(2, 'a') |
remove(x) | 리스트에서 첫 번째로 나오는 요소 x를 제거 | lst.remove(3) |
pop([i]) | 지정된 위치 i의 요소를 제거하고 반환 (기본은 마지막 요소) | lst.pop() or lst.pop(1) |
clear() | 리스트의 모든 요소를 제거 | lst.clear() |
index(x[, start[, end]]) | 요소 x의 첫 번째 인덱스를 반환 | lst.index(2) |
count(x) | 리스트에서 요소 x의 개수를 반환 | lst.count(2) |
sort(key=None, reverse=False) | 리스트를 정렬 | lst.sort() |
reverse() | 리스트의 요소 순서를 반대로 변경 | lst.reverse() |
copy() | 리스트의 얕은 복사본을 반환 | new_list = lst.copy() |
print(numbers[0]) # 첫 번째 요소
print(numbers[-1]) # 마지막 요소
print(numbers[2:4]) # 인덱스 2부터 3까지 요소
수업 때 예제 - 점수 값을 이용한 사례
scores = [80, 90, 100, 70, 50, 40, 10, 30, 60, 120]
numbers = scores[2:5]
print(numbers)
numbers = scores[2:]
print(numbers)
numbers = scores[2::2]
print(numbers)
numbers = scores[1:-1]
print(numbers)
numbers = scores[-6:-1]
print(numbers)
수업 때 예제- 아래는 학생들의 성적을 입력 받아서 최고값, 최소값, 평균값, 특정 점수 이상의 count 프로그램
#5명의 학생의 성적을 입력 받는다.
#최대 점수, 최소 점수, 성적평균 구한다.
#80점 이상의 학생수를 카운트
STUDENTS = 5
lst = []
count = 0
for i in range(STUDENTS):
value = int(input(f"{i+1}번째 학생 성적을 입력하세요"))
lst.append(value)
print(f"최대 점수 : {max(lst)}")
print(f"최소 점수 : {min(lst)}")
print(f"성적평균 = {sum(lst)/len(lst)}")
#80점 이상 성적의 학생수를 count
for score in lst:
if score >= 80:
count += 1 # couunt = counut + 1
print(f"80점 이상 {count}명이다.")
| 사용 가능한 타입 | 설명 |
|---|---|
| 문자열 (String) | 파이썬에서 가장 일반적으로 사용되는 불변 타입 |
| 숫자 (Integer, Float) | 모든 종류의 숫자 (정수, 부동소수점)는 불변 |
| 튜플 (Tuple) | 튜플의 요소가 모두 불변 타입일 때만 해시 가능하고 키로 사용 가능 |
| 사용 불가능한 타입 | 설명 |
|---|---|
| 리스트 (List) | 리스트는 요소를 추가, 삭제, 변경할 수 있어 변경 가능(mutable) |
| 딕셔너리 (Dictionary) | 딕셔너리 역시 키나 값이 변경 가능 |
| 집합 (Set) | 집합은 내용을 변경할 수 있어서, 딕셔너리의 키로 사용 불가 |
{}를 사용하여 생성person = {"name": "John", "age": 30, "city": "New York"}
print(person)
my_dict = {
'name': 'John',
'age': 25,
'name': 'Alice' # 'name' 키가 중복됨
}
print(my_dict) # 출력: {'name': 'Alice', 'age': 25}
valid_dict = {
'name': 'John', # 문자열은 키로 사용 가능
42: 'The answer', # 정수도 키로 사용 가능
(1, 2, 3): 'Coordinates' # 튜플도 키로 사용 가능
}
# 아래 코드는 에러를 발생시킵니다.
# invalid_dict = {
# ['name']: 'John' # 리스트는 키로 사용 불가능
# }
get() 메서드를 사용하는 방법person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"])
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name",0))
KeyError를 발생시키지만, get() 메서드는 None을 반환하거나 선택적으로 다른 기본값을 반환get() 메서드는 키가 없을 경우 반환할 기본값을 설정 가능person = {"name": "John", "age": 30, "city": "New York"}
# 직접 인덱싱 사용
try:
print("Name:", person["name"]) # 존재하는 키
print("Salary:", person["salary"]) # 존재하지 않는 키
except KeyError:
print("KeyError: 'salary' key does not exist.")
# get() 메서드 사용
print("\nUsing get() method:")
print("Name:", person.get("name")) # 존재하는 키
print("Salary:", person.get("salary")) # 존재하지 않는 키, None을 반환
**print("Salary with default:", person.get("salary", "Not Available")) # 존재하지 않는 키,** 기본값 "Not Available" 반환
my_dict = {"name": "John", "age": 30, "city": "New York"}
my_dict["email"] = "john@example.com" # 새로운 키와 값 추가
my_dict["age"] = 31 # 기존 키의 값 수정
print(my_dict)
del 키워드, pop() 메서드, 또는 popitem() 메서드를 사용하여 딕셔너리에서 요소를 제거# del 키워드를 사용하여 키-값 쌍 제거
del my_dict["city"]
# pop() 메서드를 사용하여 키-값 쌍 제거 및 값 반환
age = my_dict.pop("age")
print("Removed age:", age)
# popitem() 메서드는 마지막 키-값 쌍을 제거하고 반환
item = my_dict.popitem()
print("Removed item:", item)
print(my_dict)
#메뉴를 선택한다.
#현금을 넣는다.
#구매한후에 거스름돈을 받는다.
menus = {"아메리카노":4000, "카페라떼":5000, "카페모카":6000}
print("=======메뉴======")
for name, price in menus.items():
print(f"{name}: {price}원")
selected_menu = input("주문할 메뉴를 입력하세요.")
money = int(input("돈을 넣으세요."))
price = menus.get(selected_menu,0)
if price==0:
print("메뉴가 없습니다.")
else:
change = money - price
if change >= 0:
print(f"{selected_menu} 구매. 거스름돈은 : {change}원 입니다.")
else:
print("돈이 모잘랍니다.")
#while 반복
#메뉴를 선택한다. (여러개의 메뉴를 선택 한다.)
#구매한 메뉴를 리스트로 보관도 해야 한다.
#현금을 넣는다.
#구매한후에 거스름돈을 받는다.
#구매했던 리스트와 총 구매가격? 출력!!!
menus = {"아메리카노":4000, "카페라떼":5000, "카페모카":6000}
order_list = []
total_price = 0
print("=======메뉴======")
for name, price in menus.items():
print(f"{name}: {price}원")
while True:
selected_menu = input("주문할 메뉴를 입력하세요")
price = menus.get(selected_menu, 0)
if price !=0:
#메뉴를 선택한 것을 리스트화
order_list.append(selected_menu)
total_price = total_price + menus[selected_menu]
elif selected_menu == "q":
print("주문종료")
break
else:
print("메뉴가 없습니다.")
print(f"선택한 메뉴 : {order_list}")
money = int(input("돈을 넣으세요"))
change = money - total_price
if change >=0:
print(f"{len(order_list)}개 구매, 거스름돈 {change}원 입니다.")
else:
print("돈이 부족합니다.")
faker를 이용한 가짜 데이터 생성 프로그램
from faker import Faker
fake = Faker('ko_KR')
names = []
phone_numbers = []
addresses = []
for i in range(10):
name = fake.name()
phone_number = fake.phone_number()
address = fake.address()
names.append(name)
phone_numbers.append(phone_number)
addresses.append(address)
for i in range(10):
print(f"이름: {names[i]}, 전화번호: {phone_numbers[i]}, 주소:{addresses[i]}")
| 항목 | 설명 |
|---|---|
| fake.name() | 이름 |
| fake.address() | 주소 |
| fake.postcode() | 우편 번호 |
| fake.country() | 국가명 |
| fake.company() | 회사명 |
| fake.job() | 직업명 |
| fake.phone_number() | 휴대 전화 번호 |
| fake.email() | 이메일 주소 |
| fake.user_name() | 사용자명 |
| fake.pyint(min_value=0, max_value=100) | 0부터 100 사이의 임의의 숫자 |
| fake.ipv4_private() | IP 주소 |
| fake.text() | 임의의 문장 (※ 한글 임의의 문장은 fake.catch_phrase() 사용) |
| fake.color_name() | 색상명 |