study blog

논리연산자(and, or, not), 비교연산자, 제어문(if, for, while) 본문

Python/1. Python 기초

논리연산자(and, or, not), 비교연산자, 제어문(if, for, while)

ivo_lee 2020. 1. 26. 16:40

1. 논리연산자 : and, or, not

result = True and False    # False 
result = True or False     # True 
result = not True          # False
result = True|False        # True 

2. 비교연산자 : & (bitwise연산)

- python에서 숫자 0 False로 간주, 0이 아닌 모든 숫자 True로 간주

- python에서 False는 숫자 0으로 변환 가능. True 1로 변환 가능

 

10진수 5 2진수 0101

10진수 1 2진수 0001

 

& bit 연산! (논리연산 X)

True & False  → 1 & 0 0001 & 0000 0000 0 (False)

print(bool(0))   # False
print(int(False))  # 0
print(int(True))   # 1

 

# Python은 다음의 경우를 False로 간주

숫자 0

② 빈 문자열("")

③ 빈 리스트 ([])

④ 빈 튜플( () )

⑤ 빈 dict

⑥ None

print(bool(""))  # False
print(bool("소리없는 아우성!"))  # True
print(bool([]))    # False
print(bool([0]))   # True
print(bool(()))    # False
print(bool({}))    # False
print(bool(None))  # False

3. 제어문 : if, for, while

3-1. if문

area = ["seoul","pusan","jeju"] 

if "suwon" in area :  
    pass    # 하는일이 아무것도 없을 때  
elif "seoul" in area: 
    print("서울이 있어요!") 
else:  
    print("기타등등!") 


3-2. for 문

for k in range(10):     #range가 0부터 9까지 
    print("k값은 : {}".format(k)) 

(+) 주의!! 
a = [‘a’,’b’,’c’]
for x in a   :  x에 'a','b','c' 들어감
for x in range( len(a) ) :   x에 (a의 길이-1) 들어감

3-3. while문

test=1 
while test<10: 
    print("test값은 : {}".format(test)) 
    test += 1   # test = test+1 과 동일 표현  

 

a.replace()  : 값 대체 

a = “hello world”  
b = a.replace(" ","")    # 공백 제거 


set(a) : 중복 값 없애줌

a = [“a”,”a”,”b”,”b”,”c”]    
set(a)  : [“a”,”b”,”c”]    # 그러나 결과값 list 형태로 안나와서 list 한 번 해줘야 함 

 

 


 

 

[연습문제 1] 1000보다 작은 자연수 중 3 또는 5의 배수들을 구해 모두 합하면?

result = 0 
for k in range(1,1000):  
    if k % 3 == 0:     # elif 대신 or써도 가능  
        result +=k     
    elif k % 5 ==0: 
        result +=k 
    else:              # else 안써도 상관없음
        pass   
print("1000보다 작은 자연수 중 3 또는 5의 배수들을 구해 모두 합한 값은 {}입니다.".format(result) )     

답: 233168

 



[연습문제 2] 피보나치 수열의 각 항은 바로 앞의 항 2개를 더한 값

(1과 2로 시작하는 피보나치 수열은  1,2,3,5,8,13,21,34,...)
짝수이면서 4백만 이하인 모든 항을 더하면 얼마일까요?

# 방법1 : append 사용 X + 피보나치수열 따로 구하지 X

var1=1
var2=2
var3=0
mySum=0 

while var1+var2 <= 4000000 : 
    var3 = var1+var2 
    if var3%2==0: 
        mySum +=var3 
    var1 = var2 
    var2 = var3 
print(mySum+2)

답: 4613732

# 방법2 : append 사용 + 피보나치수열 따로 구하지 X

myList = [1,2]
x =0
n= 2
result= 0 

while x <= 4000000 : 
    if myList[n-1]%2==0: 
        result += myList[n-1] 
    x = myList[n-2]+myList[n-1]   
    myList.append(x)    
    n +=1 
print(result)      

 

    
# 방법3 : n-2 대신 -1, -2 인덱스 사용

myL=[1,2]
mySum = 0 

while myL[-2] <= 4000000:  
    if myL[-2]%2==0: 
        mySum = mySum+myL[-2] 
    myL.append(myL[-2]+myL[-1]) 
print(mySum)   

 

# 방법 4:  while(피보나치 정의) + for (리스트합 구하기)

myL=[1,2];myS = 0 
while myL[-1] <= 4000000:  
    myL.append(myL[-2]+myL[-1]) 
print(myL) 
for i in myL:     # myL 값의 값들이 i가 됨 
    if i%2==0: 
        myS += i 
print(myS) 

 



[연습문제 3] 알파벳 대소문자로 되어 있는 문자열에서 가장 많이 사용된 알파벳이 무엇인지 출력하는 프로그램을 작성하시오. (단, 대소문자는 구별 X, 공백은 제외)
동률이 존재하면 알파벳 순서가 제일 앞에 있는 알파벳을 출력하시오.

sample1 = "This is a sample Program mississippi river" 
sample2 = "abcdabcdababccddcd" 


방법 1 : set 함수 사용

def myFunc(sample) :  
    sample = sample.lower() # 소문자로 
    sample = sample.replace(" ","")  # 공백제거
    s = sorted(sample) 
    ss = sorted(set(s))   
    li = [] 
    for i in ss :  
        li.append(s.count(i)) 
    print ("알파벳:{} 횟수:{}".format(ss[li.index(max(li))], max(li))) 
     
myFunc("This is a sample Program mississippi river") 
myFunc("abcdabcdababccddcd") 

[출력결과]
알파벳:i 횟수:7
알파벳:c 횟수:5

방법 2: ASCII 코드 이용해서 

sample1 = "This is a sample Program mississippi river" 
sample2 = "abcdabcdababccddcd" 
sample1 = sample1.upper() 
sample = sample1.replace(" ","") 

result1=[]; result2=[]; 
for i in range(65,91): 
    result1.append(chr(i)) 
    result2.append(sample.count(chr(i))) 
res1 = result1[ result2.index(max(result2)) ] 
res2 = max(result2) 
print("알파벳:{} 횟수:{}".format(res1,res2) )  

  
# 방법 3 : ASCII 코드 이용 + append 사용 안하고 값 비교

a = "This is a sample Program mississippi river" 
a = a.upper() 
a = a.replace(" ","") 

val = "A" 
for i in range(65,91): 
    if a.count(chr(i))>a.count(val): 
        val = chr(i) 
print("알파벳:{} 횟수:{}".format(val,a.count(val))) 

[출력결과]
알파벳:I 횟수:7

Comments