데이터분석

[23.06.09] Python 객체 지향, 모듈 (야구 게임 만들기) - 06(2)

gmwoo 2023. 6. 9. 17:47
  1. 1 ~ 9 사이의 중복되지 않는 3개의 숫자 - ex) [3, 4, 7]
  2. 1 ~ 9 사이의 중복되지 않는 3개의 숫자 입력 - ex) [1, 4, 9]
  3. Strike, Ball, Out
    1. 두 개의 리스트가 위치와 값이 같으면 strike     - ex) [1, 2, 5],   [1, 2, 5]
    2. 위치가 다르지만 값이 존재하면 ball                 - ex) [1, 2, 5],   [3, 2, 5] or [1, 8, 5]
    3. 위치, 값 모두 다르면 out                                   - ex) [1, 2, 5],  [6, 3, 9] 
  4. 3개의 strike가 나오거나 7번 진행 시, 정답을 출력하고 종료  ## 아직 덜 짰33
  5. 정답 출력: 누적해서 전체 몇 번 게임 했는지, 몇 번 이겼는지 통계로 출력

import random 
class BaseBallData:
    def __init__(self):
        self.computer = list() #컴퓨터가 생각한 숫자
        self.person = list()  #사람이 생각한 숫자 
        self.gameResult = list() #[0, 0, 0] 스트라이크숫자, 볼숫자 아웃숫자
        self.personList = list()
    
    def createComputer(self):
        cnt = 1  
        while cnt<=3:
            temp = random.randint(0, 9)
            if temp not in self.computer:
                self.computer.append(temp)
                cnt = cnt+1
                
    def createPerson(self):
        print("숫자 3개를 중복되지 않게 공백으로 나누어서 입력하세요")
        nums = input("0~9까지의 정수 세개 : ")
        nums = nums.split(" ") #-> list로 바뀐다 
        self.person=list()
        
        cnt = 1  
        while cnt<=3:
            temp = int(nums[cnt-1])
            if temp not in self.person:
                self.person.append(temp)
                cnt = cnt+1  
            else:
                print("이미 있는 숫자입니다")  
        self.personList.append( self.person )
                
    def process(self):
        result = [0,0,0]
        for i  in range(0, 3):
            if self.person[i] in self.computer:
                if self.person[i] == self.computer[i]:
                    result[0] += 1  #스트라이크
                else:  
                    result[1] += 1 #볼
            else:
                result[2]+=1  #아웃
        self.gameResult.append( result )
        print(f"스트라이크 :{result[0]} 볼:{result[1]} 아웃:{result[2]}")
        
        if result[0]==3:
            return True 
        else:
            return False 
        
    def start(self):
        #1.컴퓨터가 번호3개를 생각한다 
        self.createComputer()
        #2.사람이 숫자를 입력한다. - 3스트라이크가 되거나 7번을 기회를 다 써던가 
        cnt = 1 
        flag = False
        while not flag and  cnt<=7:
            self.createPerson() 
            flag = self.process() 
            cnt+=1
            
        if flag:
            print(f"성공 {cnt-1}만에 맞춤")
        else:
            print("실패")            
        
if __name__ == "__main__":
    b = BaseBallData()
    b.start()

 

반응형