😎

【初心者向け/ITスクール 64日】Pythonの基礎一覧2(関数) および(Number Baseball)

2023/10/18に公開

はじめに

今日は、ITスクールに通った64日目の日で、今日学んだ知識を記事にシェアしたいと思います。本記事が、ITを勉強を始めた方々にもロードマップになればいいと思います。

今日は、昨日の続きで、Pythonの文法を勉強し、直接活用する練習をしました。

Javaとの違い

  1. None : javaのnull
  2. self : thisと同じ約わりですが、省略が不可能!
  3. メソッド、関数のOverloadが不可
  4. Destructor: PythonもヒープメモリはGCが管理しますが、オブジェクトがメモリから離れる前に、Destrcutorがcall backされます。
def __del__(self):
        print("Delete Book Object on Memory")
  1. @static method : Pythonは、static methodがないので、メソッドの上に@static methodというDECORATIONを付けます。

  2. instance field : Javaの場合、宣言をしないかぎり、コンストラクタとgetter,setterが不可能ですが、Phthonはコンストラクタからinstance fieldも宣言するのが普通です。

 def __init__(self, title, price):
        print("Custom Constructor ")
        self.title = title   
        self.price = price   

関数

def test():
    print("I'm sleepy")
    
def test2():
    pass
    
def test3(a=0, b=0):
    print(a+b)
    
def test4(a=0, b=0):
    q = a + b
    w = a - b
    e = a * b
    r = a / b
    return q,w,e,r

pass: まず宣言内容を作成せずに、skipすることができ、JSのようにdefault parameterを設定することができます。

class


class Dog:
    name ="asdf"   
                   
    def bark(self):   
        print("wangwang")

    def printInfo(self):
        # Java : this.name => this. は省略可能> name
        # Python : self.name => self. は省略不可能
        print(self.name, self.age)

    
    @staticmethod
    def staticMethodTest():
        print("static wangwang")

d.bark()
Dog.bark(d)

class宣言時にもパラメータにselfというオブジェクト参照値を入れることが必須です。
instanceからはパラメータを入れずにも呼び出すことが可能です。

Number Baseball

computerが0~9から3つを組み合わせた3桁数と、ユーザーが0~9から3つを組み合わせた3桁数を分析し、互いの3桁数から一致すれ数があれば、ball, 桁(index)までおなじあらstrikeになるゲーム。3strikeの場合、完全一致になるので、終了

Javaと違う点 Not Inを活用すること(No Set)

以前、javaからも具象があるのですが、時間内に失敗したチャレンジです。
Javaの癖があることで、Hashsetとshuffleメソッドの同じやり方で、接したのですが、
pythonのnot in演算子でとても簡単に解決できる問題でした。

私のコード
def comPick():
    firstNum = randint(0,9)
    s = {firstNum}
    while len(list(s)) < 3 :
        s.add(randint(0, 9))
     
    print("컴퓨터가 세 자리 수를 선정했습니다.") 
    return list(s)

def userPick1():
    userlist = []
    firstNum = int(input("첫번째 번호 입력(0~9)"))
    if -1<firstNum<10:
        userlist.append(firstNum)   
        return userlist            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick1()
    
def userPick2(userlist):
    secondNum = int(input("두번째 번호 입력(0~9)"))
    if -1<secondNum<10:
        if secondNum != userlist[0]:
            userlist.append(secondNum) 
            return userlist         
        else:
            print("중복된 숫자를  입력했습니다. 다시 입력해주세요")
            return userPick2(userlist)      
            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick2(userlist)    
    
def userPick3(userlist):
    finalNum = int(input("마지막 번호 입력(0~9)"))
    if -1<finalNum<10:
        s ={userlist[0],userlist[1]}
        s.add(finalNum)
        if(len(list(s)))==3:
            userlist.append(finalNum) 
            return userlist;            
        else:
            print("중복된 숫자를  입력했습니다. 다시 입력해주세요")
            return userPick3(userlist)      
            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick3(userlist)     
after
def comPick():
    numbers = []
    while len(numbers) < 3 :
        num = randint(0,9)
        if num not in numbers:
            numbers.append(num)
    print("컴퓨터가 세 자리 수를 선정했습니다.") 
    return numbers

def userPick1():
    userlist = []
    firstNum = int(input("첫번째 번호 입력(0~9)"))
    if -1<firstNum<10:
        userlist.append(firstNum)   
        return userlist            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick1()
    
def userPick2(userlist):
    secondNum = int(input("두번째 번호 입력(0~9)"))
    if -1<secondNum<10:
        if secondNum != userlist[0]:
            userlist.append(secondNum) 
            return userlist         
        else:
            print("중복된 숫자를  입력했습니다. 다시 입력해주세요")
            return userPick2(userlist)      
            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick2(userlist)    
    
def userPick3(userlist):
    finalNum = int(input("마지막 번호 입력(0~9)"))
    if -1<finalNum<10:
        if finalNum not in userlist:
            userlist.append(finalNum) 
            return userlist;            
        else:
            print("중복된 숫자를  입력했습니다. 다시 입력해주세요")
            return userPick3(userlist)      
            
    else:
        print("잘못된 입력입니다. 다시 입력해주세요")
        return userPick3(userlist)      
    
    
def judge(comlist,userlist):
    strike, ball = 0,0
    for i in range(0,3):
        for j in range(0,3):
            if comlist[i] == int(userlist[j]):
                if i == j:
                    strike += 1
                else: 
                    ball += 1
    return strike,ball         

Discussion