본문 바로가기
카테고리 없음

[Python] 2022.11.28 (피보나치 수열 출력하기, 자연수 N에 대해 N이 짝수이면 N!을, 홀수이면 ΣN을 구하기, 자연수가 홀수인지 짝수인지 판별해 주는 함수를 람다식을 이용하여 작성하기, 주민등..

by byeolsub 2023. 4. 29.

📌

'''
1. 피보나치 수열 출력하기
   피보나치 수열은 0,1로 시작하고
   앞의 두수를 더하여 새로운 수를 만들어 주는 수열을 의미한다.
   피보나치 수열의 갯수를 입력받아 피보나치 수열을 갯수만큼 저장한
   리스트를 생성하는 함수 fibo 함수를 작성하기
   
   0 1 1 2 3 5 8 13 21 34 55 89 ....  
[결과]
피보나치 수열의 요소 갯수를 입력하세요(3이상의 값) :10
fibo( 10 )=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]   
'''

#1 강사님 답
def fibo(n) :
    fibolist = [0,1] 
    num1 = 0
    num2 = 1
    num3 = num1+num2
    fibolist.append(num3) 
    for i in range(4,n+1) : # 4 ~ n (입력된 숫자)
        num1 = num2 
        num2 = num3 
        num3 = num1 + num2 
        fibolist.append(num3)
    return fibolist 

num = int(input("피보나치 수열의 요소 갯수를 입력하세요(3이상의 값) :"))    
print("fibo(",num,")=", end="")
print(fibo(num))

#2 
def fibo(n) :
    f = [0,1]
    num1 = 0
    num2 = 1
    num3 = num1 + num2
    f.append(num3)
    for i in range(3,n) :
        num1 = num2
        num2 = num3
        num3 = num1 + num2
        f.append(num3)
    return f

num = int(input("피보나치 수열의 요소 갯수를 입력하세요(3이상의 값) :"))    
print("fibo(",num,")=", end="")
print(fibo(num))

📌

'''
2. 주어진 자연수 N에 대해 N이 짝수이면 N!을,  
	홀수이면 ΣN을 구하는 코드를 작성하기
  4 : 4! = 4*3*2*1 = 24
  5 : Σ5 = 5+4+3+2+1 = 15
'''

#1 강사님 답
def calculator(n):
    if n % 2 == 0:
        print("%d!" % n,end=" = ")
        result = 1
        for i in range(n,0,-1 ):
            print("%d*" % i if i>1 else "%d = "%i, end="")
            result *=  i
    else: #홀수
        print("Σ%d" % n,end=" = ")
        result = 0
        for i in range(n,0,-1 ):
            print("%d+" % i if i>1 else "%d = "%i, end="")
            result +=  i
    return result

num = int(input("숫자를 입력하세요")) 
print(calculator(num))

#2 
def cal(n):
    if n % 2 == 0:
        result = 1
        for i in range(1, n + 1):
            result *=  i
    else:
        result = 0
        for i in range(1, n + 1):
            result +=  i
    return result

num = int(input("숫자를 입력하세요.: ")) 
print(cal(num))

📌

'''
3. 입력된 자연수가 홀수인지 짝수인지 판별해 주는 함수를 
	 람다식을 이용하여 작성하기.
[결과]
자연수를 입력하세요 : 20
20 숫자는 짝수 입니다.
자연수를 입력하세요 : 25
25 숫자는 홀수 입니다.
'''

#1 함수 정의해서 풀이하는 방식
def oddeven(n) :
    return True if n%2 == 1 else False

num = int(input("자연수를 입력하세요.: "))
if(oddeven(num)) :
    print(num,"숫자는 홀수 입니다.")
else :
    print(num,"숫자는 짝수 입니다.")

#2 람다 방식
num = int(input("자연수를 입력하세요.: "))
if ((lambda x: True if x % 2 == 1 else False)(num)) :
    print(num,"숫자는 홀수 입니다.")
else :
    print(num,"숫자는 짝수 입니다.")

📌

'''
4. 화면에서 주민등록번호를 000000-0000000 형태로 입력받는다.
   주민등록번호 뒷자리의  첫 번째 숫자는 성별을 나타낸다. 
   주민등록번호에서 성별을 나타내는 숫자를 조회하여
   성별을 나타내는 숫자가 1,3 이면 남자로 2,4면 여자로 출력한다. 
   그외는 내국인아님으로 출력한다.
   -이 없는 경우는 '주민번호 입력오류' 출력하기
'''

#1
jumin = input("000000-0000000 형태로 주민번호를 입력하세요.: ")
try :
    index = jumin.index("-")
    if(index!=6) :
        raise ValueError
    gender = jumin[index+1:index+2]
    if(gender== '1' or gender == '3') :
        print("남자")
    elif (gender== '2' or gender == '4') :
        print("여자")
    else :
        print("내국인 아님")
except :
    print("주민번호 입력 오류")
#2
import re # 정규식을 위한 모듈
jumin = input("000000-0000000 형태로 주민번호를 입력하세요.: ")
pattern = re.compile(r"\\d{6}[-]\\d{7}") # 패턴
try :
   if  pattern.match(jumin) == None :
       raise ValueError
except:       
    print("주민번호 입력 오류")    
else :
    gender = jumin[7:8]
    if gender in ('1','3') :
        print("남자")
    elif gender in ('2','4') :
        print("여자")
    else :
        print("내국인 아님")

    print("남자" if gender in ('1','3') else "여자" \\
          if gender in ('1','3','2','4')
           else "내국인 아님")

📌

5. 소문자와 숫자로 이루어진 문자를 암호화 하고 복호화 하는 프로그램 작성하기
  원래 문자 : a b c d e f g h i j k l m n o p q r s t u v w x y z 
  암호 문자 : ` ~ ! @ # $ % ^ & * ( ) - _ + = | [ ] { } ; : , . /
  원래 숫자 : 0 1 2 3 4 5 6 7 8 9 
  암호 숫자 : q w e r t y u i o p
[결과]
문자를 입력하세요 : abc123
암호화
`~!wer
복호화
abc123

#1
plain = "abcdefghijklmnopqrstuvwxyz0123456789" # 평문
cyper = "`~!@#$%^&*()-_+=|[]{};:,./qwertyuiop" # 암호문

src = input("문자를 입력하세요.: ")
result = ""
for i in range(0,len(src)) :
    result += cyper[plain.find(src[i])]
print("암호화")
print(src,"=",result)

result = ""
for i in range(0,len(src)) :
    result += plain[cyper.find(src[i])]
print("복호화")
print(src,"=",result)
#2 대문자나 이상한 문자가 기입되면 오류생성하게끔
plain = "abcdefghijklmnopqrstuvwxyz0123456789" # 평문
cyper = "`~!@#$%^&*()-_+=|[]{};:,./qwertyuiop" # 암호문

src = input("문자를 입력하세요.: ")
result = ""
try :
 for i in range(0,len(src)) :
     result += cyper[plain.index(src[i])]
 print("암호화")
 print(src,"=",result)

 result = ""
 for i in range(0,len(src)) :
     result += plain[cyper.index(src[i])]
 print("복호화")
 print(src,"=",result)
except : 
    print("소문자와 숫자만 입력하세요.")
#3
d = "abcdefghijklmnopqrstuvwxyz0123456789"
c = "`~!@#$%^&*()-_+=|[]{};:,./qwertyuiop"

src = input("문자를 입력하세요.: ")
result = ""
for i in range(0,len(src)) :
    for j in range(0,len(d)) :
        if src[i] == d[j] :
            result += c[j]
            break
print("암호화")
print(result)
src = result
result = ""
for i in range(0,len(src)) :
    for j in range(0,len(c)) :
        if src[i] == c[j] :
           result += d[j]
print("복호화") 
print(result)

📌

6. 16진수를 입력하면 16진수 인지 아닌지 판단하여
   16진수가 맞으면 10진수로 변경하기.
   16진수가 아닌 경우 16진수 아님을 출력하기

#1 int() 명령어 이용
num16 = input("16진수를 입력하세요.:")
try :
   num10= int(num16,16)
except ValueError :
   print(num16,"는 16진수가 아닙니다.")
else :
    print(num16,"의 10진수:",num10)