2017-04-10 7 views
1

에 두 줄과 세 개의 별표 모양을 만들기 :파이썬 - 나는 다수의 사용자에게 다음과 같은 모양을 인쇄하기로되어있어 중간

사용자 입력 = 1 (1 단위 높이 1 개 단위 사이

***** 
* * * 
***** 

) 두 라인 사이의 사용자 입력 = 2 (2 개 단위 높이, 2 대)

******* 
* * * 
* * * 
******* 

사용자 입력 = 3

,369에서
********* 
* * * 
* * * 
* * * 
********* 

등등 ...

는 지금, 나는 사용자가 입력 한 번호가있는 빈 사각형을 얻을 :

side = int(input("Choose a number: ")) 
inner = side - 2 
print ('*' * side) 
for i in range(inner): 
    print ('*' + ' ' * inner + '*') 
print ('*' * side) 
+0

는 당신이 우리를 보여줄 수 일반화? –

+0

이제는 질문의 일부입니다. 물어봐 줘서 고마워. –

+0

그리고 시도한 결과물? –

답변

0

그럼 보통은 ASCII 예술 문제를 해결하고자 할 때, 당신은 이미지 분석으로 시작합니다. 여기서 볼 수있는 것은 모든 이미지입니다 :

  1. 첫 번째 줄에는 2*n+3 별표가 있습니다.
  2. 다음에 별표가있는 n 공백, 별표, n 공백 및 별표가있는 n 줄이 뒤 따른다. 및
  3. 줄 번호 2*n+3 별표.

그래서 우리는 단순히의 사용을 만들 수있는 순서가 (list는, str ING, tuple) 숫자를 곱한 시퀀스를 시간의 주어진 숫자를 반복 동일한 유형의 시퀀스는 사실의 .

첫 번째 줄과 마지막 줄의 경우 간단하게 '*'*(2*n+3)을 쓸 수 있습니다. 중간의 선들은 '*'+' '*n+'*'+' '*n+'*'으로 구성 될 수 있으며 우리는 이것을 n 번 반복해야합니다. 함께 라인에 가입 '\n'.join(..)를 사용하여 다음

['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)] 
#^first ^middle line    ^last line 

그리고 :

def print_pattern(n): 
    print('\n'.join(['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]))

을이 생성

>>> print_pattern(1) 
***** 
* * * 
***** 
>>> print_pattern(2) 
******* 
* * * 
* * * 
******* 
>>> print_pattern(3) 
********* 
* * * 
* * * 
* * * 
********* 
>>> print_pattern(4) 
*********** 
* * * 
* * * 
* * * 
* * * 
*********** 
>>> print_pattern(5) 
************* 
*  *  * 
*  *  * 
*  *  * 
*  *  * 
*  *  * 
************* 

또한 그것을 만들 수 있습니다 그래서 우리는 함께 라인의 목록을 구성 할 수 있습니다 더 많은 사전 (비록 보통은 덜 파이썬 적이라고 여겨지 긴하지만) for 루프를 사용함으로써 :

또는 사용자 입력과 프로그램:

프로그램이 수행해야하는 두 가지 일이있다
def print_pattern(n): 
    print('*'*(2*n+3)) 
    for _ in range(n): 
     print('*'+' '*n+'*'+' '*n+'*') 
    print('*'*(2*n+3)) 
n = int(input("Eliga un número: ")) print_pattern(n)
+0

정말 고마워요! for 루프를 사용하여 코드를 사용하려고하지만 이미지가 표시되지 않습니다. 내가 뭘 잘못하고 있는지 알아? 나는 'n'을 사용자 입력 번호와 동일하게 설정합니다. –

+0

@ IreneCastañeda : 루프 코드로 질문을 업데이트 할 수 있습니까? –

+0

@ IreneCastaña : 업데이트 된 답변을 참조하십시오. 함수 호출 *을 잊어 버렸습니다. –

0

. 먼저, 상단 및 하단 라인의 길이를 계산해야합니다. 별표 3 개와 간격 2 개가 있으며 각 간격은 사용자가 입력 한 숫자와 같은 길이이므로 3 + 2 * (사용자 수)입니다.

그런 다음 루프를 사용해야합니다. 먼저 위에 계산 한 숫자에서 별표 수를 인쇄하십시오. 그런 다음 루프를 사용하여 별표와 공백을 인쇄하십시오. 루프의 각 반복을 수행하여 한 줄을 인쇄 할 수 있으므로 루프는 올바른 줄 수를 인쇄하는 데 사용됩니다. 그런 다음 별표의 첫 번째 줄과 일치하는 마지막 줄을 인쇄하십시오.

0

이 당신을 위해 작동합니다 :

m = 6 
n = 2 
for i in range(m*n+(m-n)): 
    print '*', 

print 
for c in range(m): 
    for i in range(m): 
     print "*", 
     for b in range(n): 
      print ' ', 

    print 

for i in range(m*n+(m-n)): 
print '*', 

print 
0

나는 형식을 사용() 당신이 뭘하려

def ascing(n, C, patmid = "*{0: <{gap}}*{0: <{gap}}*\n"): 
    mid = (n * patmid).format(' ', gap=n) 
    print("{0}\n{1}{0}".format((3+2*n)*C, mid)) 


for x in range(1,7): 
    ascing(x, '*') 
    print("\n====================\n")