2012-09-21 2 views
0

곱셈 테이블을 인쇄하는 프로그램이 있습니다. 사용자가 문자열 "a"를 입력하면매개 변수 유형에 관계없이 함수를 호출하기위한 올바른 접근 방식

def print_tables(input): 
    for i in xrange(1,11): 
     print "%s x %s = %s" %(input, i, input*i) 

user_input = raw_input("What do you want multiplied ten fold? ") 

if(user_input.isdigit()): 
    print_tables(int(user_input)) 

else: 
    print_tables(user_input) 

, 나는 출력이 될 것으로 기대합니다 :

a x 1 = a 
a x 2 = aa 
a x 3 = aaa 
a x 4 = aaaa 
a x 5 = aaaaa 
a x 6 = aaaaaa 
a x 7 = aaaaaaa 
a x 8 = aaaaaaaa 
a x 9 = aaaaaaaaa 
a x 10 = aaaaaaaaaa 

나에게 중복 조금 기분이 모두 ifelse 블록에서 print_tables 함수를 호출.

매개 변수 유형에 관계없이 print_tables 함수를 호출하는 더 좋은 방법이 있습니까?

입니다
if user_input.isdigit(): 
    user_input = int(user_input) 

print_tables(user_input) 

는, 하나의 호출을 가지고 있지만 하나의 변수로 다른 경우 깔때기 :

+0

'A', 테이블은 도끼 7 '과 같이 표시됩니다 = aaaaaaa'. 이게 니가 원하는거야? – eumiro

+0

예, 언급하지 않았습니다. 나는 그것을 질문에 추가 할 것이다. – Animesh

답변

3
print_tables(int(user_input) if user_input.isdigit() else user_input) 
+0

감사합니다. 파이썬에서 이와 같은 라이너를 작성하는 것이 합당한가? – Animesh

+0

@Nanda http://stackoverflow.com/questions/356161/python-coding-standards-best-practices – StefanNch

+1

@Nanda : 인라인 if는 일부 C와 유사한 언어의 3 진 연산자와 동일한 Python 코드입니다 (test? value_if_true : value_if_false) –

3

한 가지 좋은 방법이 있습니다.

+0

개인적인 선호도가있을 수 있지만 런타임 중에 변수 이름 뒤의 형식을 변경하지 않는 것이 좋습니다 ('user_input'은 문자열이고 그 다음은 아마도 int입니다). 나는 그것을 다른 이름으로 줄 것이다. – eumiro

+0

@eumiro : 음, user_input.isdigit() else user_input'과 같이 new_var = int (user_input)과 같은 새로운 변수를 만들 수 있습니다. 그러나이 변수는 두 가지 유형 중 하나를 가질 수 있습니다 (한 번에 하나씩 만). 변수가 같은 타입을 유지하는 것은 그리 중요하지 않지만, 이런 경우에는 함수가 다른 타입의 인자를 받아 들일 수 있다는 것이 중요합니다.오리 - 타이핑 관점에서 보면, 변수로하는 모든 작업이'print_tables'를 호출하면,'print_tables'를 호출 할 때 작동하는 것이 중요합니다. "공식"유형은 적합하지 않습니다. – BrenBarn

+0

'user_input'의 이름 짓기 규칙이'string'이라고 주장하고 좋은 선택이 아니라는 것에 동의합니다. 나는 다른 이름을 사용해야했다. 그러나 여전히 @BrenBarn이 말했듯이이 경우 나는'print_tables'가 작동하기를 원했습니다. – Animesh

1
def mul(x, y): 
    try: 
     return int(x) * y 
    except ValueError: 
     return x * y 

def print_tables(input): 
    for i in xrange(1,11): 
     print "%s x %s = %s" %(input, i, mul(input, i)) 

user_input = raw_input("What do you want multiplied ten fold? ") 
print_tables(user_input) 

설명 : print_tables 자체가 입력 인식되지 않는, 즉, 서로 다른 인수 '유형에 다르게 동작하지 않습니다. 그것은 다형 적이어야하는 곱셈입니다. 그래서, pythonic 접근 방식은 이것을 명백하게하는 것입니다.

두 번째 생각에서 전화를하는 방법에 대해 머리를 숙이는 함수가 있다면 문제를 해결하지 마십시오. 그냥 그 기능을 제거하십시오! 사용자가 입력하는 경우 그들이 말하는 것처럼

def _print_table(s): 
    for i in xrange(1,11): 
     print "%s x %s = %s" %(s, i, i * s) 

def print_str_table(s): 
    return _print_table(str(s)) 

def print_int_table(s): 
    return _print_table(int(s)) 

user_input = raw_input("What do you want multiplied ten fold? ") 
if user_input.isdigit(): 
    print_int_table(user_input) 
else: 
    print_str_table(user_input) 

,

당신은 의심의 여지를주지 않는다 무엇을 의심 제공 아무것도 포기

+0

이봐, 난 네 답을 정말 좋아해. 죄송합니다. 다른 답변을 수락했으나 괜찮 으면 질문이 있습니다. 통화 상대방이 지나가고있는 유형을 돌봐야하지 않습니까? 수정의 맥락에서,'mul (x, y)'가받는 매개 변수의 곱셈을 단순히해서는 안 되는가? – Animesh

+0

@ 난다 : 나는 그 게시물에 대답했다. – georg

관련 문제