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도 가능
'스파르타코딩클럽[AI트랙 3기] > 파이썬 거북이반' 카테고리의 다른 글
| [파이썬 거북이반] #4 class심화 (1) | 2022.09.22 |
|---|---|
| [파이썬 거북이반] #3 class (1) | 2022.09.20 |
| [파이썬 거북이반] #2 함수 (1) | 2022.09.20 |