[TIL] 241126 | python | random | replace | numpy where | sql 실행 순서

·2024년 11월 26일

TIL

목록 보기
11/88
post-thumbnail
  1. 아티클 스터디 1개
  2. 사전캠프 달리기반 파이썬 과제 1-3
  3. SQL 세션
  4. 직무 세션

random 모듈

항상 헷갈리는 랜덤 모듈 ..

불러오기 (import)

import random

random()

  • 0과 1 사이의 난수 반환
random.random()

randrange(a, b)

  • [a, b) 범위의 무작위 정수 반환.
random.randrange(1, 6)
# 1~5 범위의 정수 랜덤 반환

shuffle()

  • 시퀀스를 뒤죽박죽 섞는다
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)

# 결과 예시: [3, 2, 5, 1, 4]

choice()

  • 아무 원소나 하나 뽑아 준다
a = ['a', 'b', 'c', 'd', 'e']
random.choice(a)
# 'c'

영단어 맞추기 게임 만들기

replace

  • 문자열.replace("검색 문자", "치환 문자", 치환 횟수)
  • 꼭 다른 변수에 저장해주어야 함.
abc = 'abcdeabcde'
new_abc = abc.replace('a', '9')
print(new_abc)

# '9bcde9bcde'

list.index() 와 numpy where

  • list.index(찾는 값): 중복값이 있는 경우 첫 번째 값만 반환.
  • numpy where: np.where(조건)
import numpy as np
a = np.array(['a', 'b', 'c', 'a'])
print(np.where(a == 'a'))

# 결과: (array([0, 3]),)

최종 코드

import random
import numpy as np
words = [...] # 영단어 리스트. 여기서는 생략하도록 한다.

answer = random.choice(words)
answer_list = [i for i in answer]
print(f'이 단어는 {len(answer)} 자리입니다.')

now = '*' * len(answer)

chance = 1
while chance < 10: # 정답을 맞췄거나, 기회를 다 쓰면 종료.
    print(now)
    quiz_try = input(f'{chance}번째 시도. 알파벳을 입력하세요.')
    if quiz_try in answer: # 단어 안에 있는 글자 맞춤.
        ans_array = np.array(answer_list)

        answer_list = list(answer.replace(quiz_try, '*'))
        a_index = np.where(ans_array == quiz_try)[0] # 맞춘 알파벳이 있는 위치
        for i in a_index:
            now_list = list(now)
            now_list[i] = quiz_try
            now = ''.join(now_list)
        if now == answer:
            print('정답입니다. 게임 종료.')
            break
        print(f'{quiz_try}가 단어에 있습니다. 현재 정답 상황: {now} \n 남은 기회: {9 - chance}')
    else:
        print(f'{quiz_try}는(은) 정답 단어에 없습니다.\n 현재 남은 기회: {9 - chance}')
    chance += 1

if now != answer:
    print('기회를 모두 소진했습니다.')
  • 완성하기는 했지만 깔끔하지 못한 코드같다. 더 쉽고 간결하게 풀 수 있는 방법을 생각해보아야겠다.

SQL 세션

SQL 코딩 순서

  • SELECT → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

SQL 실행 순서

  • FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

코딩 순서와 실행순서의 차이를 꼭 알아야 하는 이유

  1. 디버깅 도움
    • 실행 순서를 이해하면 에러 발생시 문제를 빠르게 찾을 수 있다
  2. 정확한 결과 도출
    • 실행 순서를 고려하지 않으면 예상과 다른 결과가 나올 수 있다
  • MySQL에서는 표준 SQL과 달리 SELECT절에서 선언해준 Alias를 ORDER BY는 물론이고 GROUP BY, HAVING에서도 이용할 수 있다. (참고링크)

  • MySQL에서도 WHERE절에서는 SELECT절에서 정의한 Alias를 이용할 수 없다

profile
To Dare is To Do

0개의 댓글