파이썬 프로그래밍 질문입니다.

킴듸   
   조회 5646   추천 0    

 



프로그래밍 과제인데요.

몇시간째 고민중인데 감이 영 안와서 질문올려봅니다..

주어진 과제를 순서도 그리고 프로그래밍 해야하는데

조언 부탁드립니다.


N의 값을 입력받아서 정렬시키는 건데 만약 20을 입력받았으면

1

2 3

4 5 6 7

8 9 10 11 12 13 14 15

16 17 18 19 20

이런식으로 표시되게 해야합니다.

줄바꿈을 하는건데 2의 0제곱부터 나열되는 숫자가 2배씩 증가하는 건데 아예 감도 안와서 ㅠㅠ 책을봐도 교수님책이라 그런지 잘 모르겠네요 조언 부탁드립니다.

인터넷 서칭도 조금 해봤는데 아직 안배운 명령어가 많아서 모르겠더라고요.. 최대한 간단하게 if while for range 같은걸로만 표현할순 없을까요.

친구는 print(/₩)로 줄바꿈 하라는데 잘 모르겠어요 도와주세요!! 

짧은글 일수록 신중하게.
파이썬은 저도 이제 막 공부중인지라 저도 실제 코드를 알려드리진 못하겠지만...

프로그래밍은 수단/방법입니다. 그 프로그래밍전에 논리와 알고리즘이 만들어져야 합니다. 프로그래밍은 그 논리와 알고리즘을 기계가 해석할 수 있는 언어와 순서로 표현한 것 뿐이죠. 간단하게는... 저기 줄바꿈의 규칙을 찾아서 조건문으로 넣어주면 되는 겁니다. 초보가 힌트를 드리자면... 첫번째 숫자는 2의 제곱수이고  그 줄에 들어가 있는 숫자의 갯수가 각 줄의 첫번째 숫자와 같다는 거?
     
킴듸 2016-04
오.. 힌트가 도움이 될 것 같네요

근데 코딩짜기도 전에 전 지금 순서도 짜는데 시간을 다 보내고 있습니다ㅜㅜ. 아예 맥을 못짚고 있는..
지노진호 2016-04
자바로 하면

int x = 20;

int a = 0;

while(Math.pow(2, a)<=20) {
for(int i = 0 ; i < Math.pow(2, a) && x >= Math.pow(2, a)+i ; i++) {
System.out.print((int)Math.pow(2, a)+i);
System.out.print(" ");
}
System.out.println("");
a++;
}


==>> 결과

1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20
     
킴듸 2016-04
자바는 뭔지도 배운적도 없어서요.. 이렇게 봐도 잘 모르겠네요..ㅜㅜ
이사무엘 2016-04
import sys

lf_num = 1

for i in range(1, 21):
    sys.stdout.write(str(i) + ' ')
    if i == lf_num:
        sys.stdout.write('\n')
        lf_num = (lf_num * 2) + 1
     
킴듸 2016-04
음.. 모르는 문법이 되게 많네요..
import나 sys.stdout.write(str(i)+' ')라던지..
 if_num은 뭔가 했더니 변수명이였군요 ㅋㅋㅋ 무지해서 ㅠㅠ

import sys

a = 1
N=int(input())
for i in range(1, N+1):
    sys.stdout.write(str(i) + ' ')
    if i == a:
        sys.stdout.write('\n')
        a = (a * 2) + 1
일단 대충 이렇게 미천한 실력으로 바꿔보니 실행은 잘 되는것 같은데
모르는 문법이 있어서 그런지 어떻게 이렇게 되는지 잘 모르겠네요. 설명 조금만 해주시면 안될까요.
혹시 더 쉬운 문법으로 작성해주실수는 없나요..? 늦은 시간에 죄송합니다
          
이사무엘 2016-04
파이썬의 print함수(3.x 부터 함수로 취급합니다.)는 문자열 출력후 자동으로 CrLf(줄바꿈)를 넣어주죠.
그래서 CrLf를 사용하지 않을 방법을 찾아봐야됩니다.

다른 언어라면 C언어의 printf나 C++의 std::cout, Java의 System.out.print 같은것을 써보면 편하게 되겠죠?
파이썬은 파이썬 프로그램이 직접 표준 입출력을 사용 할 수 있도록 sys모듈에서 제공 합니다.

sys.stdout.write('Hello world') # 표준 출력에 Hello world를 출력한다. printf("Hello world");
sys.stdout.write('Hello world\n') # 표준 출력에 Hello world를 출력하고 줄바꿈을 한다. printf("Hello world\n");
이건희 2016-04
import sys

N = int(input("input number: "))
a = 1
i = 0

while i < N:
<tab>i = i+1
<tab>sys.stdout.write(str(i))
<tab>if i == a:
<tab><tab>sys.stdout.write('\n")
<tab><tab>a = (a * 2) + 1

(<tab>은 글자 그대로 탭을 한번 입력한 것 입니다.... 덧글에 탭이 안먹히네요. 아시다시피 파이썬은 들여쓰기 잘 맞춰야합니다)
이건희 2016-04
*비밀글입니다
     
킴듸 2016-04
정말 친절한 답변 감사합니다.
설명을 잘 해주셔서 이해는 됐습니다. 그런데 아직 배우지 않은 문법들은 사용하면 안된다고 선배님이 말하시더라고요import나 sys.stdout.write(str(i))를 다른 것으로 대체할수있는 방법은 없을까요..? 친구들은 print(₩n)을 사용했다고 하네요.. ㅜㅜ
          
이사무엘 2016-04
그렇다면 스트링 콘캐트네이션으로 만드셔야 할겁니다
               
킴듸 2016-04
무슨말씀이신지 잘 모르겠네요ㅜㅜ 콘캐트네이션 검색해봐도 안나오네요..

팝이좋아 님이 달아주신 방식이 콘캐트네이션인가요?
                    
이사무엘 2016-04
s = "1 " + "2 "
이런식으로 문자열을 합치는것을 말합니다.

https://en.wikipedia.org/wiki/Concatenation
팝이좋아 2016-04
대학교 과제 수준이면 아래 정도 코드면 될꺼 같은데요.

Number = int(input('Input Number : '))

temp = 1
idx = 1
lineChk = 1

while(idx <= Number):
    if lineChk < temp:
        print idx,
    else:
        print idx
        temp = temp * 2
        lineChk = 0
   
    lineChk = lineChk + 1
    idx = idx + 1


한번 돌려 보세요
     
킴듸 2016-04
syntax error라네요..
줄바꿈은 어디서 되는건가요..?
          
팝이좋아 2016-04
python 실행 시키고 붙여 넣기 하신건 아니신지....?

.py 파일로 저장 하시고 python test.py 이렇게 실행 해보세요.

줄 바꿈은

print 할때 마지막에 , 콤마를 넣으면 줄바꿈을 안합니다.
               
이사무엘 2016-04
아마 팝이좋아님이 작성하신 코드는 2.7버전 기준이라서 3.x에서는 실행이 안됩니다.
                    
팝이좋아 2016-04
질문에 버전 명시가 안되어 있어서 2.7 기준으로 작성 했네요 ^^;

3.x 버전 사용하면 다음과 같은 방법으로 사용해도 됩니다.

Number = int(input('Input Number : '))

temp = 1
idx = 1
lineChk = 1

while(idx <= Number):
    if lineChk < temp:
        print (idx, end="")
    else:
        print (idx)
        temp = temp * 2
        lineChk = 0
   
    lineChk = lineChk + 1
    idx = idx + 1


QnA
제목Page 2604/5712
2014-05   5171727   정은준1
2015-12   1705816   백메가
2021-07   5601   김가피시
2014-08   5601   김건우
2013-02   5601   이상정
2006-02   5601   유이동
2017-02   5601   씨형
2016-08   5600   힛또
2007-05   5600   이정석
2016-11   5600   Landa
2016-11   5600   장동건2014
2020-01   5600   전설의흑곰
2006-01   5600   권희석
2016-10   5600   muuu
2017-05   5600   무아
2006-05   5600   조우근
2018-01   5600   야구감독
2006-07   5600   김윤술
2007-04   5600   남경림
2011-11   5600   뚜뚜김대원
2021-07   5600   돌아온디드
2018-04   5600   mt22