PYTHON

[파이썬] 기초 연습문제

Jonny 2022. 5. 10. 16:02

1번 

1번

num = int(input("number 입력"))
n = int(input("n 입력"))

check = 0x8000000000000000
num1 = num
i=0
while(i<64) :#num을 2진수로 표현
    if((num1&check)==0): #num1의 맨 앞 비트가 0일때
        print('0', end="")
    else:                #num1의 맨 앞 비트가 1일때
        print('1', end="")

    num1= num1 << 1
    i += 1
print()
        

i = 0
while(i<n) :
    if((num&check)==0): #num의 맨 앞 비트가 0일때
        num = num <<1   #그냥 시피트(산술shift는 어차피 뒤에 0 붙으므로)
    else:               #num의 맨 앞 비트가 1일때
        num = num<<1    #왼쪽으로 시프트 해주고
        num | 1         #num의 마지막 피트에 1추가 시킴
    i += 1

num1 = num

i=0
while(i<64) :
    if((num1&check)==0):
        print('0', end="")
    else:
        print('1', end="")

    num1 = num1 << 1
    i+=1

 

 

2번

2번

 

s = list(input("대상 문자열 입력"))
t = list(input("제거할 문자열 입력"))

i = 0 
result = [] #append 함수를 사용하기 위해 list 만듬

while i < len(s): #입력받은 list만큼 반복
    if s[i] != t[0] : #s[i]와 제거할 t가 같지 않으면
	        result.append(s[i]) #append함수를 사용하여 s[i]에 저장
    i+=1 #반복

   
result.reverse() #이걸 뒤집
    

print("결과 문자열은 {0} 입니다.".format(result))

#실행결과
대상 문자열 입력abcabc
제거할 문자열 입력b
결과 문자열은 ['c', 'a', 'c', 'a'] 입니다.

 

 

 

3번

3번

 

import sys

s = input("첫번째 문자열 입력")
t = input("두번째 문자열 입력")

def strcmp(s, t) : #매개변수로 s,t 입력받음
    for i in range(min(len(s), len(t))): #s와t의 최소길이만큼 비교
            if(ord(s[i]) > ord(t[i])) :  #각각의 인덱스를 비교
                return 1
            elif(ord(s[i]) < ord(t[i])):
                return -1
            else :                       #길이가 다르면 for문 빠져나옴
                continue

    if len(s) < len(t) :                 #길이를 비교하여 더 긴 쪽이 값이 더 큼
        return -1
    elif len(s) > len(t) :
        return 1
    else :                               #같은 경우에는 0을 리턴
        return 0

result = strcmp(s, t)

print(result)

#실행결과
첫번째 문자열 입력bca
두번째 문자열 입력bbc
1

첫번째 문자열 입력abcd
두번째 문자열 입력abcde
-1

 

 

 

 

5번

 

5번

 

class Compare: #부모 클래스
    def __init__(self, s, t): #생성자 메소드
        self.s = s            #두 문자열  저장
        self.t = t

    def cmp(self, s, t):      #추상 메소드 cmp
        pass

class Strcmp(Compare) :         #자식 클래스
    def __init__(self, s, t):   #생성자 메소드
        super().__init__(s, t)  #super 사용하여 초기화

    def cmp(self):              #문자로 비교하는 오버라이딩 메소드 cmp
        for i in range(min(len(self.s), len(self.t))) : #s와 t의 최소길이만큼 비교
            if(ord(self.s[i]) < ord(self.t[i])): #각각의 인덱스를 비교
                return 1
            elif (ord(self.s[i]) > ord(self.t[i])) :
                return -1
            else :
                continue       # 길이가 다르면 for문 빠져나옴

        if len(self.s) > len(self.t) :    #길이를 비교하여 더 긴쪽이 -1리턴
            return -1
        elif len(self.s) < len(self.t) :
            return 1
        else :                  #길이가 같은 경우 0리턴턴
           return 0

class Numcmp(Compare) :         #자식 클래스
    def __init__(self, s, t):   #super 사용하여 초기화
        super().__init__(s, t)

    def cmp(self):              #실수로 변환하여 비교하는 오버라이딩 메소드cmp
        a = float(self.s)            #실수로 변환하여
        b = float(self.t)

        if(a > b) :             #a가 큰 경우에는 1, 작은 경우에는 -1 같을 경우에는 0반환
            return 1
        elif(a < b) :
            return -1
        else:
            return 0

s = input("첫번째 문자열 입력")     #문자열을 입력받아
t = input("두번째 문자열 입력")

NUM, CHART = 1,2      #NUM과 CAHRT를 1,2로 초기화
cond = NUM            #cond를 NUM으로 초기화

for i in range(len(s)) :           #입력받은 s의 길이만큼 반복하여 c에 저장
    c = s[i]
    if i == 0 and c == '-' :
        continue
    if c.isdigit() or c == '.' :
        continue
    else :              #실수가 아니라면 cond를 CHART로 초기화
        cond = CHART
        break

if cond == NUM :        #cond가 숫자라면
    for i in range(len(t)) :    #t의 길이만큼 반복하여 c에 저장
        c = t[i]
        if i == 0 and c == '-':
            continue
        if c.isdigit() or c == '.' :
            continue
        else :          #실수가 아니라면 cond를 CHART로 초기화
            cond = CHART
            break

if cond == NUM :    #cond가 실수라면 Numcmp를 통해 실수크기 판별
    p = Numcmp(s,t)
else:               #cond가 실수가 아니라면 Strcmp를 통해 사전상문자크기 판별
    p = Strcmp(s,t)

print(p.cmp())

 

 

 

 

6번

 

6번

 

s = input("첫번째 문자열 입력")
t = input("두번쨰 문자열 입력")

def deco(func):
    def stricmp(*args, **kwargs):
        re = s.replace(" ","")
        re2 = t.replace(" ","")
        return func(re, re2) #바깥함수의 입력인자로 받은 함수를 리턴
    return stricmp      #실제 데코레이터 함수 이름 리턴

@deco
def strcmp(s, t):
    for i in range(min(len(s), len(t))):  # s와t의 최소길이만큼 비교
        if (ord(s[i]) > ord(t[i])):  # 각각의 인덱스를 비교
            return 1
        elif (ord(s[i]) < ord(t[i])):
            return -1
        else:  # 길이가 다르면 for문 빠져나옴
            continue

    if len(s) < len(t):  # 길이를 비교하여 더 긴 쪽이 값이 더 큼
        return -1
    elif len(s) > len(t):
        return 1
    else:  # 같은 경우에는 0을 리턴
        return 0

result = strcmp(s,t)
print(result)

 

'PYTHON' 카테고리의 다른 글

[파이썬] Numpy  (0) 2022.05.12
[파이썬] 파이썬 입문 12장 연습문제  (0) 2022.05.11
[파이썬] 예외처리  (0) 2022.05.10
[파이썬] 객체지향 프로그래밍  (0) 2022.05.10
[파이썬] 함수  (0) 2022.05.10