앞에서 while 문으로 별찍기를 할때 시간이 좀 걸렸다.

자바로 할 때는 별찍기 예제를 할때는 항상 for 문만 이용했기 때문이다.

파이썬을 공부하면서 좋은 경험을 했다.

오늘은 for 문이다.



[문제1] 1부터 100까지 출력

1부터 100까지의 숫자를 for문을 이용하여 출력하시오.


>>> for i in range(1, 101):

...     print(i)


위 코드는 내가 짠 코드



[문제2] 5의 배수의 총합

for문을 이용하여 1부터 1000까지의 자연수 중 5의 배수에 해당되는 자연수들의 총합을 구하시오.


>>> sum = 0

>>> for i in range(1, 1001):

...     if i%5 ==0:

...             sum += i

...

>>> print(sum)

100500



[문제3] 학급의 평균 점수

for문을 이용하여 A 학급의 평균 점수를 구해 보자.

A = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]


>>> Sum = 0

>>> for score in A:

...     Sum += score

...

>>> average = Sum/len(A)

>>> print(average)

79.0




[문제4] 혈액형

다음은 학생들의 혈액형(A, B, AB, O)에 대한 데이터이다.

['A', 'B', 'A', 'O', 'AB', 'AB', 'O', 'A', 'B', 'O', 'B', 'AB']

for 문을 이용하여 각 혈액형 별 학생수의 합계를 구하시오.


>>> A = [a for a in Data if a == 'A']

>>> B = [b for b in Data if b == 'B']

>>> AB = [ab for ab in Data if ab == 'AB']

>>> O = [o for o in Data if o == 'O']


[문제5] 리스트 내포1

리스트 중에서 홀수에만 2를 곱하여 저장하는 다음과 같은 코드가 있다.

numbers = [1, 2, 3, 4, 5]

result = []
for n in numbers:
    if n % 2 == 1:
        result.append(n*2)

위 코드를 리스트 내포(list comprehension)를 이용하여 표현하시오.




[문제6] 리스트 내포2

리스트 내포를 이용하여 다음 문장에서 모음('aeiou')을 제거하시오.

Life is too short, you need python




[문제1] 1부터 100까지 더하기

1부터 100까지의 자연수를 모두 더하고 그 결과를 출력하시오.


>>> Sum = 0

>>> i = 1

>>> while i <= 100:

...     Sum += i

...     i += 1

...

>>> print(Sum)

5050



[문제2] 3의 배수의 합

1부터 1000까지의 자연수 중 3의 배수의 합을 구하시오.



>>> result = 0

>>> i =1

>>> while i <= 1000:

...     if i%3 == 0:

...             result += i

...     i += 1

...

>>> print (result)




[문제3] 50점 이상의 총합

다음은 A학급 학생의 점수를 나타내는 리스트이다. 다음 리스트에서 50점 이상의 점수들의 총합을 구하시오.

A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25]



>>>

>>> i = 0

>>> sum = 0

>>> while i < 10:

...     if A[i] >= 50:

...             sum += A[i]

...     i += 1

...

>>> print(sum)

481



[문제4] 별 표시하기1

while문을 이용하여 아래와 같이 별(*)을 표시하는 프로그램을 작성해 보자.

*
**
***
****



>>> i = 1

>>> a = 1

>>> while i <= 5:

...     if a <= i:

...             print(i*'*')

...     i += 1

...

*

**

***

****

*****

>>>

위에 코드는 내가 푼것!


i = 0 while True: i += 1 # while문 수행 시 1씩 증가 if i > 5: break # i 값이 5보다 크면 while문을 벗어난다. print ('*' * i) # i 값 개수만큼 *를 출력한다.


위 코드는 해설

while 문은 true 를 이용하면 편하다.


>>> i = 0

>>> while True:

...     if i >= 5:break

...     print(i*' '+'*')

...     i += 1




[문제5] 별 표시하기2

while문을 이용하여 아래와 같이 별(*)을 표시하는 프로그램을 작성해 보자.

*******
 *****
  ***
   *




>>> i = 0

>>> while True:

...     if i >=5:break

...     b =-2*i+7

...     print(i*' '+b*'*')

...     i += 1

...

*******

 *****

  ***

   *


위 코드는 내가 만든 코드



star = 7 # 별의 갯수 space = 0 # 공백의 갯수 while star > 0: print(' ' * space + '*' * star) # 공백 + 별 출력 star -= 2 # 별의 갯수는 2씩 감소 space += 1 # 공백의 갯수는 1씩 증가


위 코드는 해설 코드


내가만든코드가 더 좋은거같다...ㅋㅋ 뿌듯

현재 nodejs 로 로그인 연습을 하고 있다. 그런데 비밀번호는 무조건 암호화를 해야한다는 사실을 알게 되었다.

(어찌보면 당연한 이야기 ㅋㅋㅋ....)

자세히는 모르지만 CRYPTO 라는 방식을 이용해서 간단하게 비밀번호를 암호화 하는 방법을 알아봤다.



먼저 CRYPTO 를 사용하기 전 CRYPTO 모듈설치를 해야한다. 

터미널에서 npm install --save crypto 를 해주고 paxkage.json 에 잘 설치 되었다 확인한 뒤 모듈을 사용하면 된다.


const crypto = require('crypto')


이렇게 적어 주면 사용할 준비가 완료.



암호화는 단방향 암호화와 양방향 암호화가 있다. 단방향 암호화에 대하여 알아 볼 건데 단방향 암호화는 복호화 할 수 없는 암호화 방법이다. 

즉, 암호화된 문자열을 다시 원래 문자열로 돌려놓을 수 없다는 뜻이다. 따라서 단방향 암호화는 한 번 암호화하면 복호화할 수 없다.



crypto를 이용해서 단방향 암호화를 할 것 이다.

먼저 크립토 모듈을 불러와서 createHash 메소드를 사용한다.

먼저 기본 틀은 이렇다.


crypto.createHash(1).update(2).digest(3)



createHash 의 1에는 어떠한 알고리즘으로 암호화를 할 것인지 정하는 것인데 ( sha256, sha512 등이 있음 ) 나는 sha512 를 사용하겠다.


crypto.createHash('sha512').update(2).digest(3)



그다음 update 옆에 2에는 어떤 것을 암호화 할 것인지를 정해주면 된다.  비밀번호를 하나하나 다 치진 않을 것이기 때문에 변수 pw 를 넣어줬다. 



crypto.createHash('sha512').update(pw).digest(3)



 마지막으로 암호화된 문자열을 표시할지를 정해준다. ( base64, hex, latin1 등의 방식이 있다.)  나는 hex 방식을 사용하겠다.



crypto.createHash('sha512').update(pw).digest('hex')


이렇게 해준 뒤



function createPW(pw) {

  return crypto.createHash('sha512').update(pw).digest('hex')

}



함수로 묶어주면 암호화 하고싶은 비밀번호가 생길때마다 함수를 호출해주기만 하면 끝이다.

+ Recent posts