자료구조 - 문자열과 리스트

문자열에서는 요런 식으로 한 글자마다 번호를 매긴답니다. 문자열을 만들어서 이것저것 시켜보세요.



>>> x = 'banana'

>>> x[0] # 0번 글자는?

'b'

>>> x[2:4] # 2번부터 4번 앞(3번)까지는?

'na'

>>> x[:3] # 처음부터 3번 앞(2번)까지는?

'ban'

>>> x[3:] # 3번부터 끝까지는?

'ana'



그렇다면 banana를 nanana로 바꿀 수는 있을까요?

>>> x[0] = 'n'

요렇게 해보면…

된다구요? 안됩니다. 문자열에 들어있는 글자는 바꿀 수가 없답니다.



그래도 꼭 바꾸고 싶다면 이렇게 할 수는 있죠.

>>> x = 'n' + x[1:]

>>> x

'nanana'

이 방법은 b를 n으로 바꾼 것이 아니고 ‘n’과 ‘anana’을 합쳐서 문자열 x에 새로 넣어준 것입니다.



이번엔 리스트를 살펴보도록 하겠습니다.

원소를 추가하는 것부터 해볼까요?

>>> prime = [2, 3, 7, 11] # 2, 3, 7, 11을 원소로 갖는 리스트 prime을 만듦

>>> prime.append( 5 ) # prime에 원소 5를 추가

>>> prime

[2, 3, 7, 11, 5]



sort 함수를 사용하면 정렬을 간단하게 할 수 있구요.

>>> prime.sort() # prime을 원소 크기 순으로 정렬

>>> prime

[2, 3, 5, 7, 11]



원소를 삭제하는 것도 되지요. 리스트도 문자열처럼 0번부터 번호를 매기는 거 아시죠?

>>> del prime[4] # prime의 4번 원소를 삭제

>>> prime

[2, 3, 5, 7]



그리고 문자열과는 달리 원소를 바로 바꿔줄 수도 있습니다.

>>> prime[0] = 1

>>> prime

[1, 3, 5, 7]



리스트 속에 리스트를 집어넣을 수도 있지요.

피자가게에서 음식을 주문하는 것을 리스트로 만들어 볼까요?

>>> orders = ['potato', ['pizza', 'Coke', 'salad'], 'hamburger']

>>> orders[1]

['pizza', 'Coke', 'salad']

>>> orders[1][2]

'salad'



마찬가지로 리스트를 사용해서 간단히 행렬을 표현할 수도 있습니다. 행렬은 아마 고등학교 때 배우죠?

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]



지금까지 문자열과 리스트를 따로따로 알아봤는데요, 이번엔 둘 다 갖고 놀아봅시다.

문자열을 리스트로 바꿔보도록 하죠.

>>> list=[]

>>> string = 'Be happy!'

>>> for x in string:

... list.append(x)

...

>>> print list

['B', 'e', ' ', 'h', 'a', 'p', 'p', 'y', '!']

처음에 list라는 변수를 만들었는데, 그 값에는 아무 원소도 없는 리스트를 넣어줬습니다.

그리고, string이라는 변수를 만들어서 ‘Be happy!’라는 문자열을 넣어줬죠.

전에 for 문을 배울 때 리스트를 이용해서 반복을 한다고 했는데, 이번엔 문자열을 이용했습니다. 여기선 string의 글자 개수만큼 반복하게 되죠.

string의 첫번째 글자를 list의 첫번째 원소로 넣고, string의 두번째 글자를 list의 두번째 원소로 넣고, 그런 식입니다.



오늘의 종합편! 우리 반 성적표를 만들어 봅시다!

학생 이름에 국, 영, 수 성적을 넣어주고,

>>> chulsu = [90, 85, 70]

>>> yunghui = [88, 79, 92]

>>> yong = [100, 100, 100] # 바로 접니당...

>>> minsu = [90, 60, 70 ]



우리 반 학생들을 전부 ban이라는 리스트에 넣어줍니다.

>>> ban = [chulsu, yunghui, yong, minsu]



성적들이 어떤지 불러내볼까요?

>>> for person in ban:

... print person

...

[90, 85, 70]

[88, 79, 92]

[100, 100, 100]

[90, 60, 70]



개인의 성적을 더해서 총점, 평균도 내 보세요.

>>> for person in ban:

... total = 0

... for score in person:

... total = total + score

... ave = total / 3

... print person, total, ave

...

[90, 85, 70] 245 81

[88, 79, 92] 259 86

[100, 100, 100] 300 100

[90, 60, 70] 220 73
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/27 11:44 2008/05/27 11:44
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3303

자료구조 - 자료형

그렇다면 파이썬에는 어떤 자료형이 있는지 살펴볼까요?

type 함수를 사용하면 자료형을 쉽게 알아 볼 수 있습니다.



>>> type('A') # 문자열



>>> type(6) # 정수



>>> type(2.8) # 소수



>>> type(3+4j) # 복소수



>>> type([1, 2, 3, 4]) # 리스트





네 번째는 복소수라는 자료형인데요, 고등학교 가면 배우지요. 복소수라는 자료형은 파이썬에서 처음 보았습니다. 물론, 리스트나 앞으로 배울 튜플, 딕셔너리라는 것도 그렇구요.



자료형에는 크게 나눠서 수치형(numbers), 순서형(sequence), 매핑형(mapping)이 있습니다.

수치형에는 다시 정수(int), 더 큰 정수(long int), 소수(float)가 있지요.

int 형은 32 비트로 –2147483648 에서 2147483647 까지의 숫자를 표현 할 수 있다고 합니다. 비트라는 것은 이진수의 자릿수 하나라고 대충 생각하고 넘어 가십시당… 오늘은 복잡한 게 왜 이리 많징…ㅜㅜ

int 형이 32 비트라는 건 다른 프로그래밍 언어에 비해서 훨씬 큰 범위입니다. C의 long 형과 같다고 하네요. 정확한 범위는 아직까지 신경 쓰실 필요가 없습니다.



ong int형은 표현 범위가 무제한이라고 합니다. 믿거나 말거나…^^

3L과 같이 숫자 뒤에 L을 붙이면 됩니다.



float는 원래 부동소수점을 의미하는데, 소수점 이하를 표현할 수 있는 수라고 생각하시면 되겠네요.



글구, 제 생각엔 complex도 수치형에 들어갈 것 같긴 한데 아직 확인을 못했습니다.



그 다음으로는 순서형이 있는데요, 문자열(string), 리스트(list), 튜플(tuple), 사용자 정의 클래스가 순서형에 속합니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/27 11:44 2008/05/27 11:44
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3302

>>> b = []
>>> e = []

>>> def main():

global c
print '*'*34
print '* Stack is First input Last Out *'
print '* Queue is First input First Out *'
print '*'*34
print '1. Insert Stack'
print '2. Delete Stack'
print '3. Show Stack'
print '4. Insert Queue'
print '5. Delete Queue'
print '6. Show Queue'
print '7. EXIT'
print 'Do you choice Number = ',
c = raw_input()
if c == '1':
insert_stack()
elif c == '2':
delete_stack()
elif c == '3':
recent_stack()
elif c == '4':
insert_queue()
elif c == '5':
delete_queue()
elif c == '6':
recent_queue()
else:
ex()


>>> def insert_stack():
print 'Insert to the Stack'
a = raw_input('-->')
b.append(a)
main()


>>> def delete_stack():
d = len(b) - 1
del b[d:]
print 'Last Stack Delete'
print 'Recent Stack is ',
print b
main()


>>> def recent_stack():
print 'Recent Stack'
print b
main()

>>> def insert_queue():
print 'Insert to the Queue'
a = raw_input('-->')
e.append(a)
main()


>>> def delete_queue():
del e[0]
print 'First Queue Delete'
print 'Recent Queue is',
print e
main()


>>> def recent_queue():
print 'Recent Queue'
print e
main()


>>> def ex():
pass

//--- 프로그램 작성 완료



//--------- 실행 예제

>>> main()
**********************************
* Stack is First input Last Out *
* Queue is First input First Out *
**********************************
1. Insert Stack
2. Delete Stack
3. Show Stack
4. Insert Queue
5. Delete Queue
6. Show Queue
7. EXIT
Do you choice Number = 1
Insert to the Stack
-->222
**********************************
* Stack is First input Last Out *
* Queue is First input First Out *
**********************************
1. Insert Stack
2. Delete Stack
3. Show Stack
4. Insert Queue
5. Delete Queue
6. Show Queue
7. EXIT
Do you choice Number = 1
Insert to the Stack
-->333
**********************************
* Stack is First input Last Out *
* Queue is First input First Out *
**********************************
1. Insert Stack
2. Delete Stack
3. Show Stack
4. Insert Queue
5. Delete Queue
6. Show Queue
7. EXIT
Do you choice Number = 3
Recent Stack
['222', '333']
**********************************
* Stack is First input Last Out *
* Queue is First input First Out *
**********************************
1. Insert Stack
2. Delete Stack
3. Show Stack
4. Insert Queue
5. Delete Queue
6. Show Queue
7. EXIT
Do you choice Number = 7
>>>
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/27 11:38 2008/05/27 11:38
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3301

파이썬 공부 2008/05/22

시작하기
   - 변수
   - 리스트
   - 인터프리터

제어구조
   - while
   - if
   - for

함수
   - 함수
   - 재귀적 용법
   - 지역변수, 전역변수
   - 값을 돌려주기
   - 람다
   - 연습 문제 (구구단)


//-------- 내용

   - 리스트



>>> family = ['father', 'mother', 'I', 'sister']
>>> len( family )
4
>>> family[2]
'I'
>>> family.remove('I')
>>> family
['father', 'mother', 'sister']


   - 인터프리터

텍스트 에디터(메모장 같은 프로그램)를 실행시켜서 아래의 예제를 입력해보세요.

//--- triangle.py 파일 내용 시작

print '직각삼각형 그리기\n'

d = float(raw_input('변의 길이 : '))

for i in range(d+1):

print '* ' * i

area = float((d ** 2) / 2)

print '넓이 : ', area

raw_input()

//--- triangle.py 파일 내용 종료

실행 => D:\Python21>python exam/triangle.py

//--- 실행시 내용

직각삼각형 그리기
변의 길이 : 4
*
* *
* * *
* * * *
넓이 : 8.0

//--------------------------------


   - while

>>> num = 1
>>> while num <= 100:
... print num
... num = num + 1
...


   - if

>>> c = 15 * 5
>>> d = 15 + 15 + 15 + 15 + 15
>>> if c > d: # 만약 c가 d보다 크면
... print 'c > d' # ‘c > d’라고 출력한다.
... elif c == d: # 그렇지 않고 c와 d가 같다면
... print 'c == d' # ‘c == d’라고 출력한다.
... else: # 이도 저도 아니면
... print 'c < d' # ‘c < d’라고 출력한다.
...
c == d

   - for

>>> family = ['father', 'mother', 'I', 'syster']
>>> for x in family: # family라는 리스트의 각각의 원소 x에 대하여:
... print x, len(x) # x와 x의 길이를 출력하라.
...
father 6
mother 6
I 1
syster 6

>>> range(2,7)
[2, 3, 4, 5, 6]
>>> for i in range(4,8):
... print i
...
[ 4, 5, 6, 7 ]

   - 함수

>>> a_list = [3, 4, 62, 27, 83, 956, 26, 58, 3, 78, 168, 64, 78, 8, 4, 6, 75, 81, 69]
>>> def print_list(a): # 지금부터 print_list 함수를 만들겠다는 뜻
... for i in a:
... print i
...
>>> print_list(a_list)


   - 재귀적 용법



>>> def countdown(n):
>>> if n == 0:
>>> print "Blastoff!"
>>> else:
>>> print n
>>> countdown(n-1)


>>> countdown(3)
3
2
1
Blastoff!




   - 지역변수, 전역변수

>>> jjang
'pig dad'

>>> def ban():
... jjang = '07'
... print 'jjang =', jjang
...
>>> ban()
jjang = 07

>>> jjang
'pig dad'


   - 값을 돌려주기

>>> def function(x):
... a = 3
... b = 5
... y = a*x + b
... return y # y 값을 돌려준다
...

>>> c = function(10)

>>> c
35



>>> def exam():
... ans = raw_input('1+2=')
... return 1+2 == int(ans)
...

>>> exam()
1+2=3
1

>>> exam()
1+2=4
0
>>>


raw_input() 이라는 함수는 사용자로부터 문자열 입력을 받는데 쓰이구요, int() 함수는 문자열을 숫자로 바꿔준다.


   - 람다

lambda 인자 : 표현식

>>> def hap(x, y):
... return x + y
...
>>> hap(10,20)
30

==>
>>> (lambda x,y: x+y)(10, 20)
30


map(함수, 리스트)

>>> map(lambda x: x**2, range(5))
[0, 1, 4, 9, 16]

reduce(함수, 순서형 자료)

>>> reduce(lambda x,y: x+y, [0,1,2,3,4])
10
>>> reduce(lambda x,y: y+x, 'abcde')
'edcba'

filter(함수, 리스트)

>>> filter(lambda x: x<5, range(10))
[0, 1, 2, 3, 4]

>>> filter(lambda x: x%2, range(10))
[1, 3, 5, 7, 9]


//---

언제나 그러하듯 예제는 따라하기 쉬우나,
중요한건 응용이라는거지~!!!
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/22 11:21 2008/05/22 11:21
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3284

구구단

>>> def gugudan():
for x in range(2,10):
for y in range(1,10):
print x , ' * ', y , ' = ', (x * y)


>>> gugudan()
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
>>>
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/22 11:21 2008/05/22 11:21
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3283

Open flash chart

Link 1:
http://chart.cafen.net/API/

Link 2 :
http://cafen.net/home/blog/29
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/21 17:12 2008/05/21 17:12
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3279

[MS-SQL] CONCAT - 문자열 합치기

Mysql 에서는 기호로 문자열 합치기를 할수 없고, 함수를 사용한다.


CONCAT

select CONCAT(문자1 , 문자1) from 테이블명
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/21 11:52 2008/05/21 11:52
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3277

개발자를 구분하는 기준

우리회사 기준.

초급 : 필요한 도구를 주었을때 그것을 이용하여 프로젝트(노가다성)를 수행할 수 있는 능력을 가진 사람

중급 : 프로젝트의 기획과 설계도를 주었을때 혼자서 해결할 수 있는 능력을 가진 사람

고급 : 아이템을 주었을때 그에 관련된 기획 및 설계 업체 선정(PM) 및 프로젝트의 모든것을 통괄 할 능력을 가진 사람
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/19 13:20 2008/05/19 13:20
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3269

Python 설치

http://wikidocs.net/mybook/read/page?pageid=16

Python 설치 파일 다운로드

윈도우즈의 경우에는 설치가 정말 쉽다. 우선 http://www.python.org (파이썬 공식 홈페이지)에서 윈도우용 파이썬 언어 패키지를 다운로드한다.
윈도우즈 95, 98, NT, 2000, ME에 관계없이 다운받을 파이썬 패키지는 동일하고 또한 동일한 방법으로 설치를 한다.
이 파일을 받으면 확장자가 exe 또는 msi이다. 실행시키면 바로 설치가 시작된다.

설치할 때 선택하는 부분이 있는 데, 무슨 내용인지 잘 모른다면 모든 것을 선택하도록 하자. 설치가 끝난 후 해주어야 할 일은 어느 디렉토리에서나 파이썬이 실행될 수 있도록 autoexec.bat 파일에 다음과 같은 줄을 넣어준다.

set PATH="%PATH%;C:\Python25"

위의 Python25이란 디렉토리를 설치할 때 경로나 이름을 다르게 하였다면 자신에게 맞게끔 고쳐야 한다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/19 10:58 2008/05/19 10:58
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3268

http://www.kisa.or.kr/kisa/notics/popup/2008/popup_200801_websecureguide.html

한국정보보호진흥원 - 웹 보안 4종 가이드

최근 해킹에 많이 이용되고 있는 웹 어플리케이션 취약점에 대한 최신 동향과
해팅 기법, 보안 대축을 다룬 4권의 가이드를 '웹 보안 4종 가이드' 라는 이름으로 발간하였습니다.

본 4종 가이드는 기존에 발간되었던 가이드의 개정판과 함께 새로운 내용의 가이드를 묶어, 최초 웹서버를 구축하는 단계에서부터 홈페이지를 개발 및 운영하는데 참고할 수 있는
총 4권의 가이드로 구성되어 있습니다.

1. 홈페이지 개발 보안 가이드
- 홈페이지 개발 시 필요한 보안 고려사항 및 주요 침해사고 사례

2. 웹 어플리케이션 보안 템플릿(PHP 버전)
- 웹 서버 구축시 서버 및 네트워크, DB와 어플리케이션의 점검 방법 제공

3. 웹서버 구축 점검가이드
- 홈페이지 공격에 이용되는 주요 취약점 설명과 각 취약점에 대한 안전한 웹 프로그래밍 기법을 제공

4. 침해사고 분석 절차 가이드
- 침해사고가 발생한 서버의 분석절차 및 최신 해킹사고 및 분석사례 제공

5. 가이드 CD

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/05/10 22:53 2008/05/10 22:53
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3245

« Previous : 1 : ... 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : ... 101 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Statistics Graph

Site Stats

Total hits:
240372
Today:
168
Yesterday:
856