[파이썬 거북이반] #1 파이썬 기초

2022. 9. 20. 14:17스파르타코딩클럽[AI트랙 3기]/파이썬 거북이반

*1교시

1.파이썬의 변수 기본 형태

변수이름 , 할당 연산자 , 변수값

age = 15

age는 변수이름 /  =는 할당 연산자 / 15는 변수값

-변수명은 데이터가 저장되어있는 주소를 별명으로 만든 것.

-컴퓨터는 메모리에 0 1로 저장한다.(메모리 주소는 계속 바뀜)

 

2.for 

x=[1,2,3]
for i in x:
print(i)
>>>
1
2
3

for i in range(len(x)):
print(i)
>>>
0
1
2

*)range는 (시작값, 끝나는값, 증가값) range에서 (0, len(x), 1)이라고 생각하면 됨.(디폴트되어있음.) > 0이상 len(x) 미만 1씩 증가해라라는 뜻임. 0부터 3미만 1씩 증가해라. len(x) 3이었으니 range(0, 3, 1)> 0, 1, 2

+)range에 스트링값 넣으면 에러. 그냥 x input()하고 숫자해도 str으로 받기 때문에 에러남.

len int를 못받음. 그래서 input()하고 싶을 때 int(input())해서 int로 입력해야함.

for i in range(10, 0, -1):
  print(i)
  print(“쓸데없는 거”)

print(“11번째줄”)

print(“11번줄”)

->'쓸데 없는거'는 for문 안에 있어서 9번 찍힘. 그리고 '11번째줄'은 for문 밖에 있어서 마지막에 한번만찍힘.

 

3.글자 하나씩 출력하기

a= input()
for i in range (len(a)):
print(a[i]) #한글자씩 출력
print(i)
>>>
0
1
2
3
...
입력한 글자 수 - 1

 >> 이때 print(type(i))하면 int가 나옴. 그래서 인덱스할 때 int만 사용가능. a[“스트링”]하면 오류남.

len은 들어갈 때는 str이나 list로 입력, 나오는 값은 int

 

*2교시

1.딕셔너리를 for문 에 넣기

가능하다. 그러나 key값만 나옴.

 x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
 for i in x:
 print(i, end=' ')
>>>
a b c d

만약  value 도 같이 출력 하고 싶으면 다음과 같이 코드를 짜자.

for key, value in 딕셔너리명.items():
print(key)

이때 변수 key, value는 마음대로 이름 지정할 수 있다. 

에러나는 경우는 for 뒤에 3개 이상의 값을 넣으면 바로 에러남. (2개를 가져가야한다고 나옴)

변수를 for에서 지정해주는 것에 따라서 출력도 순서 바꿀 수 있음 > for k,v in x.items(): print(v,k) 하면 v먼저 출력하고 k출력해줌.

 

2.딕셔너리 여러개 합치기

person 1 = {"name":"k", "age":10, "gender":"man"}
person 2 = {"name":"w", "age":12, "gender":"woman"}
person 3= {"name":"z", "age":11, "gender":"man"}
#이있는데 만약 이것을 합치고 싶으면 list를 활용.
members = []
members.append(person1)
members.append(person2)
members.append(person3)
#하면 누적되서 들어감.

.append는 한번에 하나씩 추가됨. print(len(members))해주면 3 나옴 (딕셔너리 하나를 하나로 계산)

+)이름만 뽑기

타입은 value의 타입에 따라 바뀜 > print(type(member[“name”]))하면 str, print(member[“age”])하면 int로 나옴.

+)나이 1씩 다 더하기

for member in members:
	member[“age”] +=1

print(members) # age 다 1씩 더해짐.

그런데 print를 for문 안에서 실행시키면 리스트가 3개 나옴.

+)딕셔너리의 인덱싱

딕셔너리는 순서가 없어서 print(members[0][1]) 해줘도 출력안됨.

그래서 print(members[0][‘key또는 value’]) > list의 0번째 인덱스의 값을 출력. 

딕셔너리 value자리에 list 들어갈 수 있음. dict 도 가능.

 

프로젝트)

<컴퓨터랑 가위바위보 해서 이기는 게임>

-푸는 방식 

1)다른 값 입력시 다시하게함(while 문 활용)

 제대로 가위, 바위, 보 중 하나 낼 때까지 다시 입력하라고 함.

2)컴퓨터가 가위, 바위, 보 중에 랜덤하게 선택.

3)입력값과 컴퓨터 선택값 비교해서 승, 무, 패 결정

 

>정답

1)가위,바위,보만 입력하게 함.

#1단계 코드 
possible_value=['가위','바위','보']
while True:
 player_value=input('가위,바위,보 중 하나를 입력 하세요:')
 if player_value in possible_value:
     break
 else:
     print('제대로 입력하세요.')

print(player_value,'를 선택했습니다.')
print('게임진행')

value = input(“입력하세요 : ”)

print(value)

하면 입력하는 대로 출력됨. 가위,바위,보 제외하고 다른 것을 쓰지 못하도록 해야함. while 문 이용

possible_values = [“가위”,“바위”,“”]

틀리면 다시 입력값을 받고, 세가지 경우에만 break를 한다.(break한다는 while문 멈춘다.)

while True :

 player_value = in input(“가위, 바위, 보 중에서 내주세요 ”)

 if player_value in possible_value:

  break  #True이면 break

else:

  print(“제대로 입력하세요.”)

 

print(player_value, “를 선택했습니다.”)

print(“게임 진행”)

 

2)컴퓨터가 랜덤으로 선택하게 하기.

import random
"""
possible_value=['가위','바위','보']
while True:
 player_value=input('가위,바위,보 중 하나를 입력 하세요:')
 if player_value in possible_value:
     break
 else:
     print('제대로 입력하세요.')

print(player_value,'를 선택했습니다.')
print('게임진행')
"""
random_number = random.randint(0,2)
com_list = ['가위','바위','보']
com_select = com_list[random_number]
print(com_select)

import random

random_number = random.randint(0,2)

print(random_number) 

해서 잘 작동되는지 확인. 작동되면 print 지우고 아래에 

com_list = [“가위”,“바위”,“”] 

com_select = com_list[random_number] >인덱스와 randint를 활용해준 것, 변수 com_select해줌. 

print(com_select)

+)이방법 외에도 random.choice라는 기능도 있음.(random이라는 모듈에 있는 기능. 개발자는 이와같이 끊임없이 새로운 것에 적응해야하고 적용해야한다.)

com_list = [“가위”,“바위”,“”]

com_select = random.choice(com_list)

print(com_select)

++)random choice list 말고 str도 쓸 수 있음. 그럼 한글자씩 선택됨.

 

3)두개 값 비교해서 if else 써서 결과 출력하기.

import random

possible_value=['가위','바위','보']
while True:
 player_value=input('가위,바위,보 중 하나를 입력 하세요:')
 if player_value in possible_value:
     break
 else:
     print('제대로 입력하세요.')

print(player_value,'를 선택했습니다.')
print('게임진행')

random_number = random.randint(0,2)
com_list = ['가위','바위','보']
com_select = com_list[random_number]
print(f'컴퓨터는 {com_select}를 선택했습니다.')

if com_select == player_value :
 print('비겼습니다.')
elif (com_select == '가위' and player_value=='바위') or (com_select == '바위' and player_value=='보') or (com_select == '보' and player_value=='가위') :
 print('이겼습니다.')

else :
 print('졌습니다.')

우선 print(com_select) 지워주고

if com_select == player_value : 

 print("비겼습니다.")

elif (com_select == "가위" and player_value=="바위") or (com_select == "바위" and player_value=="보") or (com_select == "보" and player_value=="가위") :

 print("이겼습니다.")

else :

print("졌습니다.")

 

컴퓨터가 선택한 값도 출력해주고 싶어서 print(f'컴퓨터는 {com_select}를 선택했습니다.')를 if 문 위에 추가해줌. 정상적으로 잘 출력됨!!!

 

팀원의 피드백으로 좀더 가독성 좋은 코드로 변경. elif를 밑으로 해서 다 따로 퍼뜨렸다.

import random

possible_value=['가위','바위','보']
while True:
 player_value=input('가위,바위,보 중 하나를 입력 하세요:')
 if player_value in possible_value:
     break
 else:
     print('제대로 입력하세요.')

print(player_value,'를 선택했습니다.')
print('게임진행')

random_number = random.randint(0,2)
com_list = ['가위','바위','보']
com_select = com_list[random_number]
print(f'컴퓨터는 {com_select}를 선택했습니다.')

if com_select == player_value :
 print('비겼습니다.')
elif (com_select == '가위' and player_value=='바위') :
    print('이겼습니다.')
elif (com_select == '바위' and player_value=='보') :
    print('이겼습니다.')
elif (com_select == '보' and player_value=='가위') :
    print('이겼습니다.')
else :
 print('졌습니다.')

 

추가하고 싶은 기능 : 이길때 까지 계속하는 것 (while문 사용)  /exit 하면 나가는 기능(while문 사용)

1)exit하면 나가는 기능

>오답 코드

import random

while True:
#     user_input = input() # 사용자의 input을 받는 함수
#     if user_input == "exit":
#         print("게임을 종료했습니다.")
#         break

    possible_value=['가위','바위','보']
    while True:
     player_value=input('가위,바위,보 중 하나를 입력 하세요:')
     if input() == "exit":
         print("게임을 나가셨습니다.")
         break
     elif player_value in possible_value:
         break
     else:
         print('제대로 입력하세요.')

    print(player_value,'를 선택했습니다.')
    print('게임진행')

    random_number = random.randint(0,2)
    com_list = ['가위','바위','보']
    com_select = com_list[random_number]
    print(f'컴퓨터는 {com_select}를 선택했습니다.')

    if com_select == player_value :
     print('비겼습니다.')
    elif (com_select == '가위' and player_value=='바위') :
        print('이겼습니다.')
    elif (com_select == '바위' and player_value=='보') :
        print('이겼습니다.')
    elif (com_select == '보' and player_value=='가위') :
        print('이겼습니다.')
    else :
     print('졌습니다.')

출력은 

가위,바위,보 중 하나를 입력 하세요:exit

제대로 입력하세요.
가위,바위,보 중 하나를 입력 하세요:exit
exit
게임을 나가셨습니다.
exit 를 선택했습니다.
게임진행
컴퓨터는 가위를 선택했습니다.
졌습니다.
가위,바위,보 중 하나를 입력 하세요:

>이따위로 됐음. 우선 바뀐것이 입력값을 두개 받아주개끔 바뀌었고, 거지같이 결과도 엉망진창인 코드가 되어버림..

 

 

 

**)if ~in : 있으면 있다, 없으면 없다.

list도 되고 str도 가능