コンピュータサイエンスベース(Code States)セッション5/Sprint 1(様々な状況をシミュレート)
10810 ワード
けいさん
コンパイルは、実際のプログラミングで1行でPython機能を実現できる機能です.
コードの簡略化に使用され、直感的で高速です.
条件が複雑になると直感性が低下し、メモリ使用量が増加するため使いにくい.
numbers = [1, 2, 3, 4]
squares = []
for n in numbers:
squares.append(n**2)
print(squares) # [1, 4, 9, 16]
numbers = [1, 2, 3, 4]
squares = [n**2 for n in numbers]
print(squares) # [1, 4, 9, 16]
list_a = [1, 2, 3, 4]
list_b = [2, 3, 4, 5]
common_num = []
for a in list_a:
for b in list_b:
if a == b:
common_num.append(a)
print(common_num) # [2, 3, 4]
list_a = [1, 2, 3, 4]
list_b = [2, 3, 4, 5]
common_num = [a for a in list_a for b in list_b if a == b]
print(common_num) # [2, 3, 4]
# 딕셔너리 컴프리헨션
test = {'A': 5, 'B': 7, 'C': 9, 'D': 6, 'E': 10}
test = {na:test for na,test in test.items() if na != 'E'}
print(test) # {'A': 5, 'B': 7, 'C': 9, 'D': 6}
# 아래와 같이 조건을 반복문 대신 조건을 먼저 쓸 수 있다.
# 조건을 위해 if를 사용하는 경우 else를 작성해줘야된다.
pas = {name: 'PASS' if numbers > 8 else 'NO PASS' for name, numbers in numbers.items()}
print(pas) # AttributeError: 'list' object has no attribute 'items'
# 아래처럼 반복문을 연속으로 작성가능하다.
# set은 특성상 중복값을 제외한다.
print('list for loop : ',[n for n in range(1, 5+1) for n in range(1, 5+1)]) # list for loop : [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
print('set for loop : ',{n for n in range(1, 5+1) for n in range(1, 5+1)}) # list for loop : [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
# 두개의 리스트를 하나의 딕셔너리로 합침.
# 하나는 key, 또 다른 하나는 value로 사용한다
subjects = ['math', 'history', 'english', 'computer engineering']
scores = [90, 80, 95, 100]
score_dict = {key: value for key, value in zip(subjects, scores)}
print(score_dict) # {'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}
# 튜플 리스트를 딕셔너리 형태로 변환
score_tuples = [('math', 90), ('history', 80), ('english', 95), ('computer engineering', 100)]
score_dict = {t[0]: t[1] for t in score_tuples}
print(score_dict) # {'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}
ゾーン変数とグローバル変数
コードが複雑になったり、機能が増えたりすると、関数やクラスへのアクセスは変数の使用によって変わります.
変数名の設定によっては,変数利用率の変数設計が重要である.
≪領域変数|Area Variables|oem_src≫:この変数を含む関数でのみ変更および読み取りが可能です.
汎用グローバル変数:Pythonファイル全体から値を読み込むことができます.関数でエッジspectと可読性の値をできるだけ変更しないでください.
≪グローバル・グローバル変数|Global Global Variable|oem_src≫:通常のグローバル変数とは異なり、変数の作成時のみ異なります.
属する関数が異なる場合は、名前が同じであっても、領域変数を他の変数と見なします.
グローバル変数は、Pythonファイル内のすべての関数に使用できます.
# 아래 소스코드를 한 줄씩 실행하면서 지역변수와 전역변수에 대해 파악한다.
g_var = 'g_var' # 전역변수
# 값 수정후(수정값)
def variables():
global glo_var # global 전역변수
glo_var = 'glo_var' # global 전역변수에 새로운 값 할당
lo_var = 'lo_var' # 지역변수
print()
print('(값 수정후)함수 안에서 g_var(전역변수) : ', g_var) # 수정되지 않고 초기값을 출력함
print('(값 수정후)함수 안에서 glo_var(global 전역변수) : ', glo_var) # 함수에서 수정된 후 값을 출력함
print('함수 안에서 lo_var(지역변수) : ', lo_var) # 특정 함수에서만 출력되는 지역변수
# 전역변수를 파라미터로 담은 함수
def second_variables(glo_var,g_var):
glo_var = 'glo_var in second_variables()'
g_var = 'g_var in second_variables()'
lo_var = 'second lo_var'
print('서로 다른 함수에서 지역변수이름이 같은 경우 :',lo_var)
return glo_var,g_var
# 값 수정전(초기값)
g_var = 'g_var_new_value'
glo_var = 'glo_var_new_value'
print('(값 수정전)함수 밖에서 g_var(전역변수) : ', g_var)
print('(값 수정전)함수 밖에서 glo_var(global 전역변수) : ', glo_var) # 새로 할당된 값으로 수정됨
# print('함수 밖에서 lo_var(지역변수) : ', lo_var) # 특정 함수 안에서만 사용하는 지역변수이므로 출력안됨
# 전역변수의 값 수정
#print('함수의 파라미터가 전역변수인 경우 :', second_variables(glo_var, g_var))
# 지역변수를 갖고 오는 경우
#print('함수의 파라미터가 지역변수인 경우 :', second_variables(glo_var, lo_var))
# 함수에서 수정된 전역변수 재호출
print('전역변수값 :',glo_var, g_var)
variables()
# (값 수정전)함수 밖에서 g_var(전역변수) : g_var_new_value
# (값 수정전)함수 밖에서 glo_var(global 전역변수) : glo_var_new_value
# 전역변수값 : glo_var_new_value g_var_new_value
# (값 수정후)함수 안에서 g_var(전역변수) : g_var_new_value
# (값 수정후)함수 안에서 glo_var(global 전역변수) : glo_var
# 함수 안에서 lo_var(지역변수) : lo_var
文法および例外を処理します。
思考時間:異常処理をどのように使用しますか?
実際の大規模なサービスではコラボレーションを行い,例外処理を行うことが重要である.
Pythonでは、ifを必要とせずに、繰り返し実行される内部構文をループした後にelse構文を追加できます.
for~else構文では、実行するかどうかはブレークポイントに依存します.
if/else構文では、elseは「前の構文が実行されなければelse構文を実行する」という意味です.
try/それ以外の文もこの文の前のtry文を実行し、異常が発生した場合はそれ以外の文を実行します.
for i in range(3):
print('loop : ', i) # 1) 루프반복수행
else :
print('Else statement') # 2) else 구문 추가수행
# loop : 0
# loop : 1
# loop : 2
# Else statement
# 그렇다면 break문이 있다면?
for i in range(3):
print('loop : ', i) # 1) 루프반복수행
if i == 1:
break # break는 어떤 영향을 줄 것인가?
else :
print('Else statement') # 2) else 구문 추가수행
# loop : 0
# loop : 1
# 반복문에 빈 리스트를 넣으면 어떻게 될까?
for i in []:
print('loop : ', i) # 1) 루프반복수행
else :
print('Else statement') # 2) else 구문 추가수행
# Else statement
# 반복문이 while 형태로 False인 경우에는 어떨까?
while False:
print('loop : ', i) # 1) 루프반복수행
else :
print('Else statement') # 2) else 구문 추가수행
# Else statement
# 서로소 판별문제
p_a = 5
p_b = 3
for i in range(2, min(p_a, p_b) +1):
print('testing ....', i)
if p_a % i == 0 and p_b % i == 0:
print('서로소가 아닙니다.')
break
else:
print('서로소입니다.')
# testing .... 2
# testing .... 3
# 서로소입니다.
# for~else 예시
for i in []:
print('실행안됨')
else:
print('실행되면 안됨')
# 실행되면 안됨
# while~else 예시
while False:
print('실행안됨')
else:
print('실행되면 안됨')
# 실행되면 안됨
# 첫번째방법. 조건에 맞는 경우, 함수에서 부울값을 반환해주는 방법
def bool_return(v1, v2):
for i in range(2, min(v1, v2) +1):
if v1 % i == 0 and v2 % i == 0:
return False
return True
# 조건점검
#assert bool_return(4,9), '서로소입니다.'
#assert bool_return(3,6), '코드 점검 메시지입니다.'
assert not bool_return(3,6), '서로소 아닙니다.'
print('bool_return:',bool_return(4,9)) # 디폴트값 반환
# bool_return: True
# 두번째방법. 조건에 맞는 경우, 함수에서 결과값 변수를 반환해주고 break로 빠져나온다.
def variable_return(p_a, p_b):
is_variable = True
for i in range(2, min(p_a, p_b) +1):
if p_a % i == 0 and p_b % i == 0:
is_variable = False
break
return is_variable
# 조건점검
assert variable_return(4,9), '서로소입니다.'
#assert variable_return(3,6), '코드 점검 메시지입니다2.'
assert not variable_return(3,6), '서로소 아닙니다.'
print('variable_return:',variable_return(4,9)) # 변수값 반환
# variable_return: True
def try_finally_ex(filename):
print('function start') # right case / error case, 1
handle = open(filename, encoding='utf-8')
try:
print('try test') # right case , 2
raise NotImplementedError
print('raise test')
return handle.read()
except FileNotFoundError:
print('file except') # right case
else:
print('file else')
finally:
print('finally call') # right case, 3
handle.close
filename = 'a.txt' # right case
#filename = 'b.txt' # error case
try_finally_ex(filename) # error case, 4
# try / except
try:
print(3/0)
except:
print('except case')
# except case
# try / except
try:
print(5/0)
except ZeroDivisionError:
print('except case ZeroDivisionError')
# except case ZeroDivisionError
# try / except
try:
print(7/0)
except ZeroDivisionError as e:
print(e)
# division by zero
# try / except / else
try:
print(3/1)
except:
print('except case')
else:
print('else case')
# 3.0
# else case
# try / except / finally
try:
print(5/0)
except:
print('except case')
finally:
print('finally case')
# except case
# finally case
# try / except / finally
try:
print(5/0)
print(try test)
except NameError as n:
print(n)
except ZeroDivisionError as z:
print(z)
pass
# SyntaxError: invalid syntax
# try / raise / except
try:
print('try test')
test = int(input())
if test < 0:
raise NotImplementedError # 예외사항에 대해 처리하는 raise!
print('test2 : ',test)
except NotImplementedError:
print('NotImplemented Error')
# None을 return 하는 경우
def none_test(num1, num2):
try:
return num1 / num2
except ZeroDivisionError:
return None # None 반환
# 문제없음, 단순히 None이 있는지 없는지 판단함
# result = none_test(0,2)
# print(result)
if result is None:
print('result is None')
# 문제발생
result = none_test(0, 2)
print(result)
# 조건식에서 not을 활용하는 경우, 파이썬에서는 None, 빈문자열, 빈리스트, 0을 모두 False로 판단한다
# 단순히 결과값이 0인데도 not result 조건으로 인해 False 처리된다.
# if not result:
# print('not result')
# 0.0
# None을 return 하지 않는다.
def not_none_return(num1, num2):
try:
return num1 / num2
except ZeroDivisionError as z:
raise ValueError('숫자 입력값이 잘못된 경우') from z
else:
print(result)
try:
#result = not_none_return(2, 0) # case 1 - 정상적으로 except 처리
#result = not_none_return(0, 2) # case 2 - 값 반환
except ValueError:
print('숫자 입력값이 잘못된 경우') # None을 반환하는 대신 예외를 발생시킨다.
else:
print(result)
Reference
この問題について(コンピュータサイエンスベース(Code States)セッション5/Sprint 1(様々な状況をシミュレート)), 我々は、より多くの情報をここで見つけました https://velog.io/@oojjww1/코드스테이츠컴퓨터-공학-기본Computer-Science-Session-5-Sprint-1다양한-상황에-대한-시뮬레이션テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol