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번
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번
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번
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번
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 |