파이썬 연령별정보를 문자열로 리턴하기, 문자열이면 문자열대로,정수면정수대로 리턴하기 도와주실수있을까여..

조회수 1903회

1. def generation(x):
숫자로된 나이값을 받아서 "10대", "20대", "30대"로 문자열 리턴하는 함수를 만들어야해요..

def generation(x):
    return(int(age)+"대")

여기가 문제인데 아직 age값을 받지도 않은 이 generation함수가 이렇게될까요?
age=int(input())
나이는 정수로 받아야할거같아서 int를 사용했습니다.

이미지


2. sum(a,b):
a, b가 문자열이면 문자열을 더한값, a, b가 정수라면 더한값을 리턴해야합니다

제가 여러가지 방법을 시도해 봤는데 조건문을 쓰면 한줄만에 코드를 넣지 못하고..
return "x"+"y" 이런식이면 str은 문자열은 더할수없다고 뜨고 ㅠ
뒤에 정수 int()쓰면 여기선또 타입이문제라고하는데 어떻게 이걸 한줄로 하쥬..

접근방법이 뭔가 틀린거겠죠..

1 답변

  • 파이썬은 동적타입결정 언어입니다.

    즉 실행때 타입이 결정되는 언어로 실행해보기전까진 무슨 타입인지 알 수 없습니다. 이것은 때론 파이썬의 큰 단점으로 작용합니다.

    In [73]: a = 'aaa'                                                              
    
    In [74]: b = 'bbb'                                                              
    
    In [75]: a + b                                                                  
    Out[75]: 'aaabbb'
    
    In [76]: n1 = 10                                                                
    
    In [77]: n2 = 20                                                                
    
    In [78]: n1 + n2                                                                
    Out[78]: 30
    
    In [84]: a                                                                      
    Out[84]: 'aaa'
    
    In [85]: a.__add__('nnnnn')                                                     
    Out[85]: 'aaannnnn'
    
    In [86]: n1                                                                     
    Out[86]: 10
    
    In [87]: n1.__add__(30)                                                         
    Out[87]: 40
    

    파이썬에서는 + 호출시 __add__를 호출합니다.

    사실 파이썬은 꽤 어려운 언어입니다. 자료형도 없고 대화식 화면에서 뚝딱뚝딱하면 결과가 나오니 다루기 쉬운언어처럼 보일뿐이지 실상은 알아야 할 부분이 많습니다. 그 중 대표적인 것이 magic method들입니다.

    파이썬은 연산자 오버로딩이 가능하므로 꼭 magic method들에 대해 알고 있어야 합니다. 이 부분은 파이썬 공식 도움말을 참조해보시기 바랍니다.

    즉 위에서 보듯이 문자열이나 정수형이나 모두 __add__ 를 구현하고 있으므로 그냥 + 로 더하면 됩니다.

    In [80]: def sum2(var1, var2): 
        ...:     return var1 + var2
    
    In [81]: sum2(1, 2)                                                             
    Out[81]: 3
    
    In [82]: sum2('aaa', 'bbb')                                                     
    Out[82]: 'aaabbb'
    

    자 그리고 첫번째 질문은 숙제 같군요?

    상기의 요구사항은 간단한 경우이므로 간단히 한줄짜리 람다로 구현할 수 있습니다.

    단 한줄에 불과합니다. 분석해보시기 바랍니다.

    In [67]: generation = lambda x:'{}대'.format(int(x / 100 * 10) * 10) if x > 9 else '10대이하'            
    
    In [68]: generation(17)                                                         
    Out[68]: '10대'
    
    In [69]: generation(27)                                                         
    Out[69]: '20대'
    
    In [70]: generation(7)                                                          
    Out[70]: '10대이하'
    
    • 네 맞아요 첫번째 질문은 숙제였습니다. 머리로는 이게 ()안에 숫자가들어가고 몇대째인지 알아야하니 ()+"대"라고 생각해버렸어요. 그러기 자꾸 오류가 나오더라고여 format함수를 이렇게 쓸수 있구나 다시한번 깨닫게해주셔서 감사합니다. 좀더 기초를 탄탄히 다져놔야겠다는 생각이듭니다! 알 수 없는 사용자 2019.4.3 18:41
    • 정답은 이거였네요..```return str((x//10)*10)+‘대 ``` 같은값을 원하더라도 다양한식으로 짤수있는게 역시 묘미인것같습니다. 알 수 없는 사용자 2019.4.3 18:46
    • 아 // 로 몫을 구해도 됩니다. 오히려 정수만 구하는 형태보다 더 효율적일 수 있습니다. 정영훈 2019.4.4 00:29
    • 아 어차피 몫을 구해도 range(1:10) 까지의 정수밖에 안나오겠군요 오.. 덕분에 배웠습니다. 알 수 없는 사용자 2019.4.4 00:33

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)