경기도 인공지능 개발 과정/Python

Python 조건문과 반복문(While, For)

agingcurve 2022. 5. 28. 14:45
반응형

학습목표

  • if 조건문의 이해하고 활용할 수 있다.

조건문

  • 조건에 따라서 다르게 수행해야할 경우에 사용한다.
  • 조건문의 결과는 boolean(참, 거짓)으로 표현 된다.
  • if, elif, else 키워드를 사용한다.
  • if, elif, else 블록에 종속된 코드는 들여쓰기로 표현한다.
  • 들여쓰기 된 코드를 블록(block), 또는 코드블록이라고 한다.
  • if 조건 : 문법으로 사용한다.
if 조건문:
    수행할 문장1
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...
In [2]:
# 들여쓰기에 주의!!! 
옷색깔 = input()

if 옷색깔 == "하얀색":
    print("빨간립스틱을 바른다.")
    
핑크색
In [3]:
# 들여쓰기에 주의!!! 
옷색깔 = input()

if 옷색깔 == "하얀색":
    print("빨간립스틱을 바른다.")
else:
    print("핑크색립스틱을 바른다.")
    
파란색
핑크색립스틱을 바른다.
  • #### 비교연산자
    • <, >, ==, !=, >=, <=
In [4]:
a = 10
b = 20

a > b
Out[4]:
False
  • bool 자료형
    • True -참
    • False - 거짓
  • AND, OR, NOT
    • 조건문에 사용되는 조건의 경우, boolean이기 때문에, 논리식 AND, OR, NOT 이 사용가능하다.
    • AND : 모든 조건이 참일 때만 참.
    • OR : 둘 중 하나만 참이어도 참.
    • NOT : 거짓이면 참. 참이면 거짓.
  • 논리표
ABANDORNOT A
T T T T F
T F F T F
F T F T T
F F F F T
  • 우선순위
    • NOT > AND > OR
In [6]:
a = 10
b = 20
c = 30 

if a == 10 and b == 15 :
    print('hahaha')
In [9]:
if (a == 10 or b == 15) and c == 25 :
    print('수행해주세요')
In [12]:
if not a == 41 :
    print('hahaha')
hahaha
  • #### in, not in
In [13]:
if 1 in [1,2,3]:
    print('있어요^^')
있어요^^
In [14]:
1in [ 1,2,3]
Out[14]:
True
  • #### pass
    • 조건문에서 아무일도 하지 않는다.
In [19]:
a = int(input())
if a == 20 :
    pass
else :
    print(a)
if a == 5 :
--------------------------------------------
ValueError Traceback (most recent call last)
Input In [19], in <cell line: 1>()
----> 1 a = int(input())
      2 if a == 20 :
      3     pass

ValueError: invalid literal for int() with base 10: 'if a == 5 :'
In [20]:
a = int(input())
if a == 10 : 
    print(a)
    print('bbb')
    print('hello')
print('end')
1
end

if의 조건이 bool이 아닌 경우

  • 일반적으로는 조건문에는 bool이 주로 위치 한다.
  • 하지만, 정수, 실수, 문자열 리스트 등 기본 타입도 조건에 사용 가능하다
  • False로 간주되는 값 (각 타입의 기본값)
    • None
    • 0
    • 0.0
    • ''
    • [] -> 빈 리스트
    • () -> 빈 튜플
    • {} -> 빈 딕셔너리
    • set() -> 빈 집합
  • 그밖에는 모두 True로 간주
In [22]:
a = 10
if a :
    print(a)
10
In [26]:
list_a = []
if list_a:
    print('true')
else :
    print('false')
false

if, else

  • if가 아닌 경우, 나머지 조건을 표현하고 싶다면 바로 아래 else 문을 사용한다.
  • if조건이 True인 경우에는 if 블록의 코드가 수행되고, 거짓인 경우 else 블록의 코드가 수행된다.
In [28]:
# 짝수인 경우에는 2로 나눈 값을 출력하고
# 홀수인 경우에는 1을 더한 값을 출력해라
num = int(input())
if num % 2 == 0:
    print(num/2)
else :
    print(num+1)
6
3.0

if, elif, else

  • 조건이 여러개인 경우, 다음 조건을 elif 블록에 명시 가능하다.
  • 이런 경우, 각 조건을 확인 후 True인 조건의 코드 블록을 실행 한다.
  • elif는 개수에 제한없이 사용 가능하다.
If 조건문:
    수행할 문장1 
    수행할 문장2
    ...
elif 조건문:
    수행할 문장1
    수행할 문장2>
    ...
elif 조건문:
    수행할 문장1
    수행할 문장2
    ...
...
else:
    수행할 문장1
    수행할 문장2
   ...
In [30]:
score = int(input())
if score == 3:
    print("good")
elif score == 2:
    print("soso")
elif score == 1:
    print("bad")
else:
    print("다시 입력")
3
good
In [31]:
enter=int(input())

if enter%2==0 and enter%3==0:
    print('2의 3의 공배수입니다.')
elif enter%2==0 :
    print('2의 배수입니다.')
elif enter%3==0:
    print('3의 배수입니다.')
else:
    print('Error!')

    
30
2의 3의 공배수입니다.
In [32]:
phone=input()

if phone[:3]=='011':
    print('SKT')
elif phone[:3]=='016':
    print('KT')
elif phone[:3]=='019':
    print('LGU')    
else:
    print('알수없음')
011-222-3333
SKT
In [38]:
phoneNumber = input()
firstNumber = phoneNumber.split('-')[0]

telecom = {'011':'SKT','016':'KT','019':'LGU'}.get(firstNumber,'알수 없는')

print(f'당신은 {telecom} 사용자 입니다.')
016-222-3333
016
당신은 KT 사용자 입니다.

중첩 조건문(nested condition)

  • 조건문의 경우 중첩하여 작성 가능하다.
  • 중첩 개수에 제한이 없다.
In [39]:
a = 11
b = 9 
c = 8

if a == 10:
    if b == 9:
        if c == 8:
            print('ok')
else:
    print('ㅠㅠ')
bb
In [2]:
# 한줄로쓰기
a = 10
if a < 4 : print('a')
else : print(3)

조건부 표현식 (conditional expression)

  • 조건부 표현식의 정의 방법
 조건문이 참인 경우 if 조건문 else 조건문이 거짓인 경우
  • 예를 들면
if score >= 60:
    message = "pass"
else:
    message = "fail"
  • 위와 같은 코드를 파이썬의 조건부 표현식을 이용해서 표기하면 아래와 같다.
message = "pass" if score >= 60 else "fail"
  • 이런 조건부 표현식은 가독성이 좋고, 한줄로 작성가능해서 자주 사용 된다.
In [45]:
score = int(input())
if score >= 60:
    message = "pass"
else:
    message = "fail"
    
print(f'학생은 {score}점 이므로 {message} 입니다.')
20
학생은 20점 이므로 fail 입니다.
In [46]:
message = "pass" if score >= 60 else "fail" 

print(f'학생은 {score}점 이므로 {message} 입니다.')
학생은 20점 이므로 fail 입니다.

-------------------------------------------------------------------------

While 문

학습목표

  • 반복문의 이해하고 활용할 수 있다.
  • while 문을 사용할 수 있다.

loop (반복문)

  • 반복적인 작업을 가능하게 해주는 도구이다.
  • 특정 조건을 만족하는 경우 수행할 수 있다.
  • 리스트, 문자열, 튜플 등 컬렉션 타입의 아이템을 하나씩 순회하면서 사용 가능하다.
  • 코드 작업에서, 가장 많이 사용하는 구문 중 하나이다.
  • while을 사용할 경우, 반복문을 멈추게 할 문장이 필요하다.
    • 그렇지 않으면 셀이 무한히 수행되며 이를 무한루프라고 한다.
    • jupyter notebook의 재부팅이 필요

while 문

  • while 조건이 True일 경우, while 코드 블록을 계속 수행한다.
  • while 코드 블록
    • if와 마찬가지로 while문 아래의 들여쓰기로 작성 된 부분을 의미한다.
  • 조건이 False가 되면 블록 수행을 멈추고 이후 코드를 실행한다.
  • while문의 기본구조
  • while 조건문 : 수행할 문장1 수행할 문장2 ....

while 문을 이용한 리스트 출력하기

In [2]:
a = [1,2,3,4]
print(len(a))
print(a[0])
4
1
In [4]:
a = [1,2,3,4,55,333,66,33,32,6756]

index = 0
while index < len(a):
    print('value : ', a[index])
    index += 1  #index = index  = 1
    
print('end')
value :  1
value :  2
value :  3
value :  4
value :  55
value :  333
value :  66
value :  33
value :  32
value :  6756
end

while 실습

  1. [1, 10, 9, 24, 25, 26] 리스트에서 20보다 큰 값만 출력하세요.
  2. 위의 리스트에서 짝수인 경우만 출력하세요.
In [7]:
list_a = [1, 10, 9, 24, 25, 26]
index = 0
while index < len(list_a):
    if list_a[index] > 20:
        print("value: ", list_a[index])
    index += 1
value:  24
value:  25
value:  26
In [ ]:
list_a = [1, 10, 9, 24, 25, 26]
index = 0
while index < len(list_a):
    if list_a[index] % 2 == 0:
        print("value: ", list_a[index])
        index += 1

무한루프

  • while의 경우 종료가 되지 않도록 코드를 작성하면 블록에서 빠져나올 수 없다.
  • Ctrl + c 를 눌러서 종료시킨다.
  • jupyter notebook 에서는 'Interrupt the kernel' (정지버튼)을 눌러서 멈춘다.
In [ ]:
 

break

  • loop를 중단할 때 사용한다.
  • 보통 조건문 안에서 수행되며, 조건을 만족하는 경우 loop를 빠져나온다.
In [11]:
while True:
    score = int(input('점수를 입력하세요.'))
    if score == 1:
        break
    print(score)
    
점수를 입력하세요.50
50
점수를 입력하세요.30
30
점수를 입력하세요.60
60
점수를 입력하세요.452
452
점수를 입력하세요.852
852
점수를 입력하세요.52
52
점수를 입력하세요.522
522
점수를 입력하세요.41
41
점수를 입력하세요.1
In [ ]:
 

continue

  • 특정한 경우에는 코드를 수행하지 않고 반복문을 계속 실행한다.
In [12]:
a = 0
while a < 10:
    a += 1
    if a == 5:
        continue
    print(a)
    
1
2
3
4
6
7
8
9
10

1 - 100까지 더하기

In [13]:
sum = 0
i = 0
while i<100:
    i += 1
    sum += i
print(sum)
5050
 

---------------------------------------------------------------

FOR 

 

학습목표

  • for 반복문의 이해하고 활용 할 수 있다.
  • range 함수를 이해하고 활용 할 수 있다.

for 반복문

  • 리스트, 문자열 등등 순회 가능한 객체를 순회하면서 값을 처리할 때 사용한다.
  • 모든 아이템이 순회되면 for 블록 종료된다.
  • for문의 기본구조
    for 변수 in 리스트(또는 튜플, 문자열):
     수행할 문장1
     수행할 문장2
     ...
    

for문 사용해보기

In [1]:
s = 'hello world!!'

for c in s:
    print(c)
h
e
l
l
o
 
w
o
r
l
d
!
!
In [2]:
a = [1,2,3,4,5]

for num in a :
    print(num)
1
2
3
4
5
  1. [1, 10, 9, 24, 25, 26] 리스트에서 20보다 큰 값만 출력하세요.
  2. 위의 리스트에서 짝수인 경우만 출력하세요.
In [3]:
list_a = [1, 10, 9, 24, 25, 26]
for num in list_a:
    if num > 20:
        print(num)
24
25
26
In [4]:
list_b = [(1,2),(3,4),(5,6)]

for t in list_b:
    print(t)
(1, 2)
(3, 4)
(5, 6)
In [5]:
list_b = [(1,2),(3,4),(5,6)]

for t1,t2 in list_b:
    print(t1,t2)
1 2
3 4
5 6
In [7]:
a,b = (1,2)
print(a,b)
1 2
In [12]:
#scores 리스트의 점수가 60점 이상이면 pass 60미만이면 fail 을 출력하세요.  이때...   리스트에 들어있는 값 순서대로 
# ex 1번 학생 pass   2번학생 fail.    과 같이 출력되도록 for 문을 작성해 주세요.  

scores = [33,21,43,56,78,63,91,84,59,81]

for i in range(len(scores)):
    result = 'fail' if scores[i] < 60 else 'pass'
    print(f'{i+1}번 학생 {result}')
1번 학생 fail
2번 학생 fail
3번 학생 fail
4번 학생 fail
5번 학생 pass
6번 학생 pass
7번 학생 pass
8번 학생 pass
9번 학생 fail
10번 학생 pass
In [11]:
list_c = [34,3,33,32,54,66]

for i in range(len(list_c)):
    print(f'{i+1} 번 점수 {list_c[i]}')
1 번 점수 34
2 번 점수 3
3 번 점수 33
4 번 점수 32
5 번 점수 54
6 번 점수 66

문자열의 아이템 출력하기

  • 문자열의 경우 순회 가능, 리스트의 유사하게 순회 가능하다.
In [13]:
s = 'test tes hahha'
for c in s:
    print(c)
t
e
s
t
 
t
e
s
 
h
a
h
h
a
In [ ]:
 

리스트 아이템 출력하기

In [14]:
for num in [1,2,3,4,4]:
    print(num)
1
2
3
4
4

dict의 아이템 출력하기

  • dictionary의 경우 기본적으로 순회 하게 되면 key값을 참조한다.
  • keys()함수를 이용하여 key 값만 순회 가능하다.
  • values()함수를 이용하여 value 값만 순회 가능하다.
  • items()함수를 이용하여 tuple형태로 key, value 순회 가능하다.
In [16]:
person = {'name':'kang','phone':'010-222-3333','address':'경기도 고양시'}
In [18]:
list(person.keys())
Out[18]:
['name', 'phone', 'address']
In [19]:
person.keys()
Out[19]:
dict_keys(['name', 'phone', 'address'])
In [21]:
for key in person.keys():
    print(key, person[key])
name kang
phone 010-222-3333
address 경기도 고양시
In [23]:
for item in person.items():
    print(item)
('name', 'kang')
('phone', '010-222-3333')
('address', '경기도 고양시')
In [24]:
for key,value in person.items():
    print(key,value)
name kang
phone 010-222-3333
address 경기도 고양시
In [25]:
for value in person.values():
    print(value)
kang
010-222-3333
경기도 고양시

for에서 index 사용하기

  • 기본적으로 for에 리스트를 순회하는 경우, 값만 추출 한다.
  • 아래와 같은 코드로 인덱스와 값 모두 사용 가능(enumerate 함수 이용)하다.
In [27]:
a = [22,43,66,44,77]

for index, value in enumerate(a): 
    print(f'{index}에 해당하는 값은 {value}')
0에 해당하는 값은 22
1에 해당하는 값은 43
2에 해당하는 값은 66
3에 해당하는 값은 44
4에 해당하는 값은 77

break

  • 반복문을 수행하는 도중 break를 만나면 loop 종료가 가능하다.
In [28]:
a = [22,43,66,44,77]

# index 0: 22
#index 1 : 43 

a = [22, 43, 66, 44, 77]
for i, v in enumerate(a):
    if i > 3:
        break
    print(f'Index {i}: {v}')
Index 0: 22
Index 1: 43
Index 2: 66
Index 3: 44

continue

  • 반복문을 수행하는 도중 continue를 만나면 해당 아이템을 건너 뛴다.
In [29]:
for index, value in enumerate(a):
    if 20 <= value <= 30:
        continue
    print(f'{index}번째 항목은 {value}입니다.')
1번째 항목은 43입니다.
2번째 항목은 66입니다.
3번째 항목은 44입니다.
4번째 항목은 77입니다.
In [30]:
for index, value in enumerate(a):
    if value >=20 and value <= 30:
        continue
    print(f'{index}번째 항목은 {value}입니다.')
1번째 항목은 43입니다.
2번째 항목은 66입니다.
3번째 항목은 44입니다.
4번째 항목은 77입니다.
In [32]:
for index, value in enumerate(a):
    if value in range(20,31):
        continue
    print(f'{index}번째 항목은 {value}입니다.')
1번째 항목은 43입니다.
2번째 항목은 66입니다.
3번째 항목은 44입니다.
4번째 항목은 77입니다.

loop 중첩

  • 반복문의 경우에도 중첩하여 사용 가능하다.
  • 중첩이라는 것은 반복문 블록의 코드안에 또 반복문의 코드가 작성되는 것을 의미한다.
  • 이런 경우, 내부 루프는 외부 루프가 수행되는 만큼 반복 수행 된다.
  • 또한 중첩의 경우 무한히 가능하다.
for 변수 in 리스트(또는 튜플, 문자열):
    for 변수 in 리스트(또는 튜플, 문자열):
        수행할 문장1
        수행할 문장2
        ...
    ...
In [35]:
for i in [1,2,3,4]:
    for j in [4,5,6,7]:
        print(f'{i}+{j}={i+j}')
    print('========')
1+4=5
1+5=6
1+6=7
1+7=8
========
2+4=6
2+5=7
2+6=8
2+7=9
========
3+4=7
3+5=8
3+6=9
3+7=10
========
4+4=8
4+5=9
4+6=10
4+7=11
========

구구단 출력하기

2 1 = 2 2 2 = 4 2 3 = 6 ... 2 9 = 18 3 1 = 3 .. 3 9 = 27 ... 9 1 = 9 ... 9 9 = 81

In [36]:
for i in range(1, 10):
    for j in range(2, 10):
        print(j, '*', i, '=', i*j, end = '\t')
    print()
2 * 1 = 2	3 * 1 = 3	4 * 1 = 4	5 * 1 = 5	6 * 1 = 6	7 * 1 = 7	8 * 1 = 8	9 * 1 = 9	
2 * 2 = 4	3 * 2 = 6	4 * 2 = 8	5 * 2 = 10	6 * 2 = 12	7 * 2 = 14	8 * 2 = 16	9 * 2 = 18	
2 * 3 = 6	3 * 3 = 9	4 * 3 = 12	5 * 3 = 15	6 * 3 = 18	7 * 3 = 21	8 * 3 = 24	9 * 3 = 27	
2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	5 * 4 = 20	6 * 4 = 24	7 * 4 = 28	8 * 4 = 32	9 * 4 = 36	
2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	6 * 5 = 30	7 * 5 = 35	8 * 5 = 40	9 * 5 = 45	
2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	7 * 6 = 42	8 * 6 = 48	9 * 6 = 54	
2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	8 * 7 = 56	9 * 7 = 63	
2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	9 * 8 = 72	
2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81	
In [37]:
for i in range(2,9):
    for j in range(1,9):
        print(f'{i}x{j}={i*j}')
    print("------------")
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
------------
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
------------
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
------------
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
------------
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
------------
7x1=7
7x2=14
7x3=21
7x4=28
7x5=35
7x6=42
7x7=49
7x8=56
------------
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
------------

collection의 길이

  • len() 내장함수로 계산 가능하다.
  • 내장함수란 파이썬 내부에 구현되어 있어서, import하지 않고도 사용 가능한 함수를 의미한다.
  • abs, len, type, range 등이 있다.
In [40]:
len(a)
len('hello')
len(range(3,100))
Out[40]:
97

range 함수

  • 리스트를 쉽게 만들 수 있는 내장함수이다.
  • 주어진 값에 따라 다양한 결과를 반환한다.
  • 숫자리스트를 자동으로 만들어 주는 range함수와 for문은 함께 자주 사용된다.
range(10)       -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(2, 10)    -> [2, 3, 4, 5, 6, 7, 8, 9] 
range(2, 10, 3) -> [2, 5, 8]
  • 1 - 100까지의 리스트 생성하기
In [41]:
list(range(1,101))
Out[41]:
[1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9,
 10,
 11,
 12,
 13,
 14,
 15,
 16,
 17,
 18,
 19,
 20,
 21,
 22,
 23,
 24,
 25,
 26,
 27,
 28,
 29,
 30,
 31,
 32,
 33,
 34,
 35,
 36,
 37,
 38,
 39,
 40,
 41,
 42,
 43,
 44,
 45,
 46,
 47,
 48,
 49,
 50,
 51,
 52,
 53,
 54,
 55,
 56,
 57,
 58,
 59,
 60,
 61,
 62,
 63,
 64,
 65,
 66,
 67,
 68,
 69,
 70,
 71,
 72,
 73,
 74,
 75,
 76,
 77,
 78,
 79,
 80,
 81,
 82,
 83,
 84,
 85,
 86,
 87,
 88,
 89,
 90,
 91,
 92,
 93,
 94,
 95,
 96,
 97,
 98,
 99,
 100]
In [ ]:
 
In [ ]:
 
In [2]:
# for와 range()를 이용하여 1-100까지 더하는 코드를 작성하시오. 
In [3]:
#for와 range를 이용하여 구구단을 출력해보시오.  

1부터 100사이의 5의 배수만을 갖는 리스트를 생성하시오

In [ ]:
 

연습문제

  1. 1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력하시오.
  2. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 최대값과 최소값을 찾으시오. (sorted, sort 사용 금지)
  3. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 평균을 구하세요.
  4. 위의 리스트중에서 짝수에는 2를 홀수에는 3을곱해서 각각 짝수, 홀수 리스트를 새로 작성하시오.
In [42]:
inte = range(1, 101)
for i in inte:
    if (i % 2 == 0):
        if((i / 2)% 11== 0):
            print("2와 11의 배수 :",i)
        else:
            print(i)
    elif (i % 11 == 0):
        print(i)
2
4
6
8
10
11
12
14
16
18
20
2와 11의 배수 : 22
24
26
28
30
32
33
34
36
38
40
42
2와 11의 배수 : 44
46
48
50
52
54
55
56
58
60
62
64
2와 11의 배수 : 66
68
70
72
74
76
77
78
80
82
84
86
2와 11의 배수 : 88
90
92
94
96
98
99
100
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 

List comprehension

  • [표현식 for 항목 in 반복가능객체]
  • [표현식 for 항목 in 반복가능객체 if 조건문]
In [44]:
#리스트에 3을 곱한 결과를 새로운 리스트에 담는예제.
a = [1,2,3,4]
result = [] 

for value in a :
    result.append(value*3 )
    
print(result)
[3, 6, 9, 12]
In [45]:
result = [value*3 for value in a]
print(result)
[3, 6, 9, 12]
In [48]:
result = [] 

for value in a :
    if value % 2 == 0:
        result.append(value*3 )
    
print(result)
[6, 12]
In [47]:
#짝수에만 곱하게 하고 싶다면?? 
even_list = [value * 3 for value in a if value%2==0]
print(even_list)
[6, 12]
In [49]:
[value*3 if value%2 == 0 else value*2 for value in a ]
Out[49]:
[2, 6, 6, 12]
In [52]:
print(a)

['1' if value % 2== 0 else '2' if value %3 == 0 else '3' for value in a]
[1, 2, 3, 4]
Out[52]:
['3', '1', '2', '1']