티스토리 뷰

반응형

5일차 강의 요약

5일차 강의에서는 for 문을 이용하여 반복적으로 특정한 동작을 수행해야 할 때 사용하는 문법과 함수를 배웠다. 

예전에 처음 for 문을 배울때는 반복한다는 개념에 대해 잘 이해하지 못했었는데, 단순히 어떤 숫자나 데이터를 반복하는데 그치기 보단 특정한 환경(조건)에 해당 데이터를 놓고서 그 조건에 잘 들어맞는지 여부를 판단하는데 유용하게 쓰일 수 있는 것 같다. 4일차 강의에서 배웠던 사용자 vs 컴퓨터의 가위바위보 게임을 예시로 들어보자면, 사용자가 이길때까지 게임을 반복적으로 수행할수 있도록  for문을 사용할 수 있을 것이다.  (4일차 강의 참고: https://kmk-sweetlife.tistory.com/50)

 

[파이썬] 4강 랜덤 모듈과 리스트 함수로 가위바위보 게임 만들기_코드 비교

4일차 강의 요약 어쩌다보니 4강도 재밌게 완수했다 ㅎㅎㅎ 4일차 강의에서는 파이썬의 무작위화(randomization)화 개념과 리스트를 활용하여 데이터를 담는 연습을 중점적으로 배웠다. 주사위를 던

kmk-sweetlife.tistory.com

 

미니 과제: FizzBuzz 게임 수행하기

우리나라로 따지면 3,6,9게임이랑 유사하다. 3의 배수의 숫자에서는 숫자를 외치지 않고, 박수만 치듯이 FizzBuzz 게임에서는 3의 배수에서는 'Fizz'를, 5의 배수에서는 'Buzz'를, 그리고 3과 5의 공통 배수의 숫자(ex.15)에서는 'FizzBuzz!'를 외쳐야 한다. 

 

1. 내가 작성한 코드

# Write your code here 👇


for n in range(1, 101):
  if n % 3 ==0 and n% 5 == 0:
    print("FizzBuzz")
  elif n % 3 == 0:
    print("Fizz")
  elif n % 5 == 0:
    print("Buzz")
  else:
    print(n)

 

 아래 안젤라 선생님 코드와의 가장 큰 차이점은, 안젤라 선생님은 range()함수 안에 숫자의 범위를 지정하기 전에 우선 범위의 최대값을 'target'으로 정의하고 시작하였다는 점이다. +1을 해줘야 하는 이유는 range(1,100)으로 지정할 경우 1이상 100미만의 숫자에 대해서만 반복되기 때문에 100이라는 숫자도 반복하고자 하는 대상이라면 101까지 범위로 지정해줘야 한다. 

 

2. 안젤라 선생님의 코드

# Write your code here 👇

target = 100

for n in range(1, target + 1):
  if n % 3 ==0 and n% 5 == 0:
    print("FizzBuzz")
  elif n % 3 == 0:
    print("Fizz")
  elif n % 5 == 0:
    print("Buzz")
  else:
    print(n)

 

 

프로젝트:  비밀번호 랜덤 생성기 만들기

사용자가 원하는 자릿수의 문자, 숫자, 특수문자를 무작위의 순서로 구성하여 비밀번호를 생성하는 과제이다. 

첫째로 문자 list, 숫자 list, 특수문자 list에서 각각 원하는 갯수만큼 추출해야 하고, 

둘째로 추출한 문자,숫자,특수문자의 조합을 무작위의 순서로 혼합하여 최종적으로 비밀번호로 사용할 수 있는 문자열을 생성해내야 한다. 

 

1. 내가 작성한 코드

#Password Generator Project
import random
letters = ['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', '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']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']

print("Welcome to the PyPassword Generator!")
nr_letters= int(input("How many letters would you like in your password?\n")) 
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))

#문자 랜덤 지정
password = []
for letter in random.sample(letters, nr_letters):
  password.append(letter)
for symbol in random.sample(symbols, nr_symbols):
  password.append(symbol)
for number in random.sample(numbers, nr_numbers):
  password.append(number)

#뽑은 값을 랜덤 순서로 나열
random_pwd = str()
for e in random.sample(password, len(password)):
  random_pwd += e

#print(random_pwd)
print(f"{nr_letters} letter, {nr_symbols} symbol, {nr_numbers} number = {random_pwd}")

결과는 정상적으로 출력되었다!

 

2. 안젤라 선생님의 코드

#Password Generator Project
import random
letters = ['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', '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']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']

print("Welcome to the PyPassword Generator!")
nr_letters = int(input("How many letters would you like in your password?\n")) 
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))

#Eazy Level
# password = ""

# for char in range(1, nr_letters + 1):
#   password += random.choice(letters)

# for char in range(1, nr_symbols + 1):
#   password += random.choice(symbols)

# for char in range(1, nr_numbers + 1):
#   password += random.choice(numbers)

# print(password)

#Hard Level
password_list = []

for char in range(1, nr_letters + 1):
  password_list.append(random.choice(letters))

for char in range(1, nr_symbols + 1):
  password_list += random.choice(symbols)

for char in range(1, nr_numbers + 1):
  password_list += random.choice(numbers)

print(password_list)
random.shuffle(password_list)
print(password_list)

password = ""
for char in password_list:
  password += char

print(f"Your password is: {password}")

 

일단 랜덤으로 추출한 숫자, 문자, 특수문자를 하나의 문자열로 구성하는 것이 제일 어려웠는데, 

내가 선택한 방법은 빈 리스트(password_list)를 미리 만들어놓고, 랜덤으로 추출된 값들을 append 함수를 이용해서 하나씩 리스트 안에 추가해주는 것이었다. 의도한 건 아닌데, 강의에서도 append 함수를 사용해도 된다고 해서 뿌듯했다. 

 

리스트 안에 추가하였다 해도 추가한 순서 그대로 들어가 있기 때문에 (예시: abced#$%^*12345), 이 순서를 무작위로 섞어주기 위해서는 한번더  for문을 이용해야 했다. 사실 random.sample 함수를 정확히 알고 쓴 것은 아니기 때문에 추가로 random 모듈에 대해 복습할 필요가 있을 것 같다. 안젤라 쌤은 순서대로 뽑힌 문자열을 shuffle 함수를 이용해 미리 무작위 조합으로 바꿔준 후 미리 정의해둔 password 문자열에 차례대로 넣어준 반면, 나는 순서대로 리스트(password)에 넣어준 후 해당 리스트의 값들을 무작위로 뽑아 문자열(random_pwd)을 구성했다. 

 

* 파이썬 random 모듈 더 배우기: https://docs.python.org/ko/3/library/random.html