본문 바로가기

공부/TIL-D

오늘 배움에 - 깊이를(연산,가위바위보,버블소트)

  1. a=2, b=a*8 보다 a <<3이 빠른 이유

  2. 가위바위보

  3. 버블소트

  4. 컴퓨터는 adder 밖에 없다. 그래서 곱셈의 과정을 덧셈과 쉬프트를 사용하는데,
    1번의 곱셈보다, 식을 단순화시켜 쉬프트만 시킨것이 성능이 좋다. 특히 2의 승수로 나누기나 곱할때, 쉬프트를 이용하면
    속도가 엄청 빨라진다 (<< , >>) 2^allowed의 예

a*8 (곱하기 연산은 쉬프트 +덧셈을 반복해야하지만) a<<3 쉬프트만 하면되서 속도가 엄청빨라짐

2. 가위바위보

포문으로 3번돌려서 , playone을 돌려서 list꺼를 어펜드해서 , 플레이어가 2개 이상이면 플레이어 윈이라는 기본구조

링크

피드백)

get_player_choice():

# string = input("입력하세요")

# while string== "짱" or "깸" or "뽀":
#      return string
# 조건문을 만들수 있는가 하는 부분

입력받아서, 가위바위보중 하나 리턴하려고 했는데,
틀린경우를 생각을 못했다, 애초에 받을때 3가지 입력이 정해진 상태가 아니면 안받으면 됬었다

get_computer_choice():

# i = random.randint(0, 2)
# dic = {'0':'가위', '1':'바위', '2': '보'}
# a = i.values()
# return a  

# dic{ 1 : "바위", 2 : "가위", 3: "보"}
# computer = random.randint(1, 3)
# computer = dic[computer]
# return computer

리스트나 튜플로 난수로 변수에 넣은후에 그 값을 반환 시켜주면 되는데
리스트에 대한 이해도가 부족했는데, 키:값 매칭 시키는게 어려웠다

who_wins(player, com)

# a = player
# b = com

# if a == "가위" and b == "보":
#     resul = "플레이어가 이겼습니다."
# elif a == "가위" and b == "가위":
#     resul = "비겼습니다"
# elif a == "가위" and b == "바위":
#     resul = "졌습니다"

# return resul

아예 생각자체를 잘못한 부분 , 플레이어랑 컴퓨터가 낸거를 비교해서 , 플레이어,컴퓨터, 아닌경우만
나누면되는건데 멍청하게 모든 경우의수를 다쓰려고 시도했다. 이기는경우, 비기는경우, 지는경우가
3가지 씩 있으므로, 비기는경우랑 이기는경우를 빼면 자동으로 지는경우가 된다 else부분이 포인트

play_one():

위에서 나온함수를 종합해서 한판했을시 어떻게 되는지 나오는부분

check_final_winner(result):

# r[]
# b[]
# if result== 'player':
#     r.append('player')
# elif b.append('computer')


# if r.count() == 'player':
#         return 'player'
#     elif r.count() == 'computer':
#         return 'computer'
#     else: none

최종승자를 알아보기 위해 아예 새로운 리스트를 만들어서 추가시켜야 된다고 생각했는데
이건 파이썬의 문법을 잘 모른 부분이니까 이해된다

play()
3판 2선승 만드는부분

# result_list[]
# result_list = play_one()
# check_final_winner(result_list)

함수 자체가 list에 통으로 append된다는점이 포인트 였다

  1. 버블소트
def bubble_sort(li):
    n=len(li)
    flag=None
    for i in range(n-1):  #핵심은 이것
        flag = False
        for j in range(n-1-i): #두가지를 일반화 할수 있는가
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                flag = True
        if flag == False:
            break    
    return li


if __name__=="__main__":
    li=[6, 2, 1, 4]
    bubble_sort(li)
    print(li)

n-1-i부분, 바깥쪽 포문이 li의 수-1만큼 도는데(여기선 4개라고 확정 지어서 쉽게 생각해서)
바깥쪽포문이 3번, 안쪽포문이 3,2,1 이렇게 도는데 이방법을 어떻게 해야될지 몰랐고,
i가 0,1,2 올라가는것을 활용해 -i하는 부분이 포인트

반응형

'공부 > TIL-D' 카테고리의 다른 글

퀵소트  (0) 2019.04.21
함수  (0) 2019.04.20
오늘 배운것 자세히  (0) 2019.04.18
오늘 배운것 자세히  (0) 2019.04.17
<picture>태그 <source>태그 background-size속성  (0) 2019.04.16