본문 바로가기
개발일지/Python

2022.01.19 Day-5 유데미 파이썬 부트캠프 (for 문)

by 다니엘의 개발 이야기 2022. 1. 19.
320x100

휴.... 마침내
최소한에 기초부분에 대해서 이해는 하고 있는
for 문에 대해서 나와서 Day3~4 보단 훨씬 생각이 가능하다..

# 🚨 Don't change the code below 👇
student_heights = input("Input a list of student heights ").split()
for n in range(0, len(student_heights)):
  student_heights[n] = int(student_heights[n])
# 🚨 Don't change the code above 👆


#Write your code below this row 👇
total_height = 0
for height in student_heights:
  total_height += height
# print(total_height)

number_of_students = 0
for student in student_heights:
  number_of_students +=1
# print(number_of_students)


average_height = round(total_height / number_of_students)
print(average_height)



================================

78 65 89 86 55 91 64 89
에 대한 최댓값을 구하라고해서 최댓값을 구하고자
내가 작성한 코드는 마지막 단 한줄이였다.
# 🚨 Don't change the code below 👇
student_scores = input("Input a list of student scores: ").split()
for n in range(0, len(student_scores)):
  student_scores[n] = int(student_scores[n])
print(student_scores)
# 🚨 Don't change the code above 👆

#Write your code below this row 👇
print(max(student_score)

하지만 선생님은 완전 다르게 해석했다.

# 🚨 Don't change the code below 👇
student_scores = input("Input a list of student scores: ").split()
for n in range(0, len(student_scores)):
  student_scores[n] = int(student_scores[n])
print(student_scores)
# 🚨 Don't change the code above 👆

#Write your code below this row 👇
highest_score = 0
for score in student_scores:
  if score > highest_score:
    highest_score = score
print(f"The highest score in the class is: {highest_score}")

이거는 student_scores에 머물러있는 숫자중
가장 큰 숫자만 highest_score에 머물게 하는 것이다.


=======================
지금은 range에 대해서 나온다.


for number in range(1,11, 3):
  print(number)

이것은 1부터 10까지 (11에서 -1)
3단위로 표현 된 것이므로 1,4,7,10
이렇게 출력된다.

그러고보니 새롭게 깨닫게 된것이 있다.
for 문은 사용될때, 범위 안에 있는 모든것이 토해내 질때까지는 순차적으로
그러나 반드시 모든것을 돌려낸다.

이를 테면 구조적으로

for x(여기는 어떻게 쓰여도 상관은 없음, 일종의 인수를 의미함) in range(1,10):
 print(x)
라고 된다면
x -> range 에서 첫번째 -> x = 1로 변환되고 1이 출력되고 첫번째는 블락이 된다.
x -> range에서 두번째 -> x = 2로 변환이 되고 2가 출력되고 두번째는 블락이 된다.
이런 식으로 반복되는게 내가 이해한 for 문이다.
사실 이 원리는 for 문에서만 활용되는 원리는 아닌것 같은지라
활용 범위가 넓은 만큼 정말 유용한 것 중 하나라고 생각 된다.

-----------------
total = 0
for number in range(1,101):
  total += number
print(total)

이건 1부터 100까지 더하기

==================================

1부터 100까지의 짝수 더하기 게임이다.
짝수 = even number 라고 말한다.
홀수 = odd number 라고 말한다.

# 이것은 1부터 100까지의 짝수를 더하라는거다.

total = 0
for even_number in lange(1,101,2):
  total += even_number
print(total)

이렇게 계속 range가 아니거나 범위 설정을 잘못해 줘서 오류가 났다.
이는
# 이것은 1부터 100까지의 짝수를 더하라는거다.

total = 0
for even_number in range(1,101,2):
  total += even_number
print(total)

이렇게 변경해줬을 뿐인데도 작동 되었다.

두번째로 알려주신 동일 문제의 다른 풀이방법은

total_2 = 0
for number in range (1,101):
  if number %2 == 0:
    total_2 += number

print(total_2)

===================
fizz buzz 게임

# 이번 과제는 fizz buzz라는 게임이다.
# 3으로 나누어 떨어지면 fizz
# 5로 나누어 떨어지면 buzz

number_for_game = range(1,101)

for i in number_for_game:
  if number_for_game % 3:
    print("Fizz")
  elif number_for_game % 5:
    print("Buzz"
  else:
    print(number_for_game)

에러가 나온다.

# 이번 과제는 fizz buzz라는 게임이다.
# 3으로 나누어 떨어지면 fizz
# 5로 나누어 떨어지면 buzz

total=0

for i in range(1,101):
  if i % 3:
    print("Fizz")
  elif i % 5:
    print("Buzz"
  else:
    print(total)
  total += 1

-------------------------
# 이번 과제는 fizz buzz라는 게임이다.
# 3으로 나누어 떨어지면 fizz
# 5로 나누어 떨어지면 buzz

total=0

for i in range(1,101):
  if i % 3:
    print("Fizz")
  elif i % 5:
    print("Buzz")
  else:
    print(total)

이렇게 했는데, 출력값이 이상하다.
홀수만 출력되고 Fizz와 Buzz도 뒤늦게 출력된다.

for i in range(1,101):
  if i ==i % 3:
    print("Fizz")
  elif i==i % 5:
    print("Buzz")


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

아... 시도는 수십번을 했는데
왜 생각이 안나냐
이렇게도 수학에 ㅄ이니 진짜 실망스럽다

이게 선생님이 알려주신 답이다.

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

보니깐 인터넷 상에서 코드 돌리는게 일정횟수 이상으로 돌리면 제자리 걸음 하는 경향이 있는것 같다.
어쩐지 계속 코드 갈아줘도 결과값은 같더라;

========================

#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 - Order not randomised:
#e.g. 4 letter, 2 symbol, 2 number = JduE&!91
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 - Order of characters randomised:
#e.g. 4 letter, 2 symbol, 2 number = g^2jk8&P

여기까지가 비밀번호 생성하는 기초레벨인데 와.. 어려운걸 떠나서 왜이렇게 머리쓰기가 싫냐.
걱정이 많아져서, 너무 많이 좌초되서 그런걸까?
파이썬 강의는 어떤것이든 초기 5챕터정도는 괜찮은데 그걸 넘어서는 순간
듣도보도 못한게 튀어나오면서 난이도 차이가 왜이렇게 나는게 당연하게 가르쳐 지는지 모르겠다.
한 편으로는 그렇게 강의하는것을 듣고 익히는건 어떤걸까?
라는 생각을 하면서도 내가 while 문 기초랑 for 문 기초 익힐때도 최소 수십번씩은 돌려가면서 익혀졌던 것 같다.

오늘이 지쳐서 그런걸까 재미가 드럽게 없다.


#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 - Order not randomised:
#e.g. 4 letter, 2 symbol, 2 number = JduE&!91
# 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 - Order of characters randomised:
#e.g. 4 letter, 2 symbol, 2 number = g^2jk8&P

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.append(random.choice(symbols))

for char in range(1, nr_numbers +1):
  password_list.append(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}")

와.. 진짜 드럽게 복잡하네 오늘은 머리쓰기가 너무 싫다.
좀 더 두고 두고 봐보자

 

와.. 진짜 개빡친다

매 주마다 좀 뒤쳐진 과정에 대해서는 다시 되 짚어보는 과정을 반복해야겠다.

 

300x250