카테고리 없음

127일차-Python설치~131일차-Python(list,tuple)

초코맛 2019. 8. 24. 14:31
반응형
 
*PATH꼬옥 체크해야 함 그렇지않으면 한참찾아야 한다!!!
체크가 되면 알아서 잡아지게 된다
여기서 확인

무거운이클립스가 되어서 이클립스를 새로 깔아주었다...
배치파일도 새로 만들어줌
c:\dev\python-workspace
다음다음다음다음...
# --*-- coding:UTF-8 --*--
'''
Created on 2019. 5. 3.
@author: owner
'''
print('안녕 파이썬')

*출력
#--*-- coding:UTF-8 --*--
print() 

Xxx.py =module

  • print()
    • //(무조건 줄을 바꾼다.)
    • 출력후 줄 변경
    • 다른형이 결합되어 출력되면 Error
    • //불린,숫자(float, int), 객체..?
    • i=7
    • print(i) 는 출력이되는데
    • print(i+"=") 는 Error
    • =>문자열로 변경 하는 str(값) 함수 사용
      • //자바만 method라고...나머지는 함수라 했음.
      • print(str(i) +"=")
    • ///번거로워 여러개 값을 묶어서 출력할때에는 format사용
    • 여러개의 값을 묶어서 출력 (형식을 가지고 출력)
      • //자바로치면 variable Arguments
      • 문자열에서 제공하는 함수 (format)
      • print( " { } 형식 {}...".format(,,,) ) 
      • ///중괄호 안으로 순서대로 배치됨
      • print("{1} 형식 {0} 형식 {2}".format("안녕","김정윤",7) 
      • 순서로 적으면 순서에 맞게 들어간다.


  • 데이터형)

name="안녕"
name='안녕'
"""
주석
여러줄
"""
name="""
여러줄 
문자열 
사용
"""


설명서) 코딩할때 이렇게 하세욤(style guide)


# --*-- coding:UTF-8 --*--
print("안녕하세요?")
i=7
print(i)
# 문자열과 다른 형을 연결하여 출력하는 것은 Error발생.
# print("오늘은"+i+"일")
# 문자열과 다른 형을 연결하여 출력할 때에는 str로  문자열형으로 변경해야 한다.
print("오늘은"+ str(i) +"일")
# 형식을 가진 문자열은 format함수를 사용하여 출력하면 편리.  (권장)
print("오늘은 {}일".format(i))
name="김"
addr="서울시 강남구 역삼동"
#중괄호는 순서대로 나오게 된다.
print("{}-{}-{}".format(name,i,addr))
#순서지정도 가능하다.
print("{2}-{1}-{0}".format(name,i,addr))
# 문자열에 *(자바는문자열에+만 됨)를 사용하면 해당 문자열이  곱하기 만큼 출력된다.
print("안녕"*3)
print("-"*30)
# --*-- coding:UTF-8 --*--
# 동적 데이터형 :변수에 값이 할당될 때 데이터형이 결정된다.
flag=True #bool
print(str(type(flag)) +" "+str(flag))
print("{}, {}".format(type(flag),flag))
i=5 #int
print("{}, {}".format(type(i),i))
i=5555555555555555555555555555555 #3점대는 int 하위는 long
print("{}, {}".format(type(i),i))
j=5.7 #float
print("{}, {}".format(type(j),j))
#msg="한줄 문자열"
msg='한줄 문자열'
print("{}, {}".format(type(msg),msg))
"""오늘은 화요일 입니다.
    내일은 수요일 입니다.
    이번주는 4일 이고
    내일은 프로젝트 중간점검이 있을 예정입니다.
    이건 주석이고 아래처럼 변수가 있으면 주석이 아니다.
"""
# msg="""오늘은 화요일 입니다.
#     내일은 수요일 입니다.
#     이번주는 4일 이고
#     내일은 프로젝트 중간점검이 있을 예정입니다.
# """
msg='''오늘은 화요일 입니다.
    내일은 수요일 입니다.
    이번주는 4일 이고
    내일은 프로젝트 중간점검이 있을 예정입니다.
'''
print("{}, {}".format(type(msg),msg))
name_list=["김","김","노","공"]
print("{}, {}".format(type(name_list),name_list))
name_tuple=("자바","오라클","Python")
print("{}, {}".format(type(name_tuple),name_tuple))
name_dict={"java":"객체지향언어","Oracle":"대용량  데이터베이스",
           "Python":"수치연산에 강력한 언어"}
print("{}, {}".format(type(name_dict),name_dict))
# --*-- coding:UTF-8 --*--
'''
연산자
'''
# 산술 연산자 : +,-,*,/,//(몫),%
print("{}+{}={}".format(5,7,5+7))
print("{}-{}={}".format(5,7,5-7))
print("{}*{}={}".format(5,7,5*7))
print("{}/{}={}".format(5,7,5/7))
print("{}//{}={}".format(8,3,8//3))
print("{}%{}={}".format(9,3,9%3))
# 쉬프트 연산자 : 비트밀기 연산
print("{}<<{}={}".format(3,2,3<<2)) #0011<<2=1100
print("{}>>{}={}".format(30,3,30>>3)) #0001 1110>>3=0000  0011
# 관계 연산자 : >,<.>=,<=,==,!=
print("{}>{}={}".format(5,7,5>7))
print("{}<{}={}".format(5,7,5<7))
print("{}=={}={}".format(5,7,5==7))
print("{}!={}={}".format(5,7,5!=7))
# 논리 연산자 : and, or, not
print("{} and {}={}".format(5>4,7<10,5>4 and 7<10))
print("{} or {}={}".format(5<4,7>10,5<4 or 7>10))
print("not {}={}".format(True,not True))
# 비트 연산 :&,|,^,~
print("{} & {}={}".format(5,7,5 & 7)) #0101 & 0111= 0101
print("{} | {}={}".format(5,7,5 | 7)) #0101 & 0111= 0111
print("{} ^ {}={}".format(5,7,5 ^ 7)) #0101 & 0111= 0010
print("~{}={}".format(5,~5))
# 대입 연산자 : =,+=,-=,*=,/=,//=,%=,<<=,>>=,&=,|=,^=
i=5
# 산술대입) =,+=,-=,*=,/=,//=,%=
i+=7 #i=i+7 =12
i-=3 #i=i-3 =9
i*=4 #i=i*4 =36
i/=5 #i=i/5 =7.2
i//=3 #i=i//3 =2.0
i%=4 #i=i%4 =2.0
i=2
i<<=2 #i=i<<2 0010<<2=1000
i>>=1 #i=i>>1 1000>>1=0100
i&=6 #i=i&6 0100 & 0110=4
i|=6 #i=i|6 0100 | 0110=6
i^=9 #i=i^9 0110 ^ 1001=1111=15
print(i)

 
*입력값 받기(키보드에 대한 입력) 
  • 자바로치면 System.in.read()
  • ///PL/SQL에서는 prompt 로 입력값을 받았었음
  • 변수=input( ) //반환은 문자열
  • 변수=input("메세지"); //반환은 문자열

*Slicing
  • 문자열 자르기 / List, Tuple 자르기
  • str[ 시작인덱스 : 끝 인덱스] //0번부터 시작
str='안녕하세요'
          01234
str[0:] -끝까지 =안녕하세요
str[1:3] -범위에 대한 문자열 자르기 =영하세
str[ :끝인덱스] -시작부터 끝인덱스 까지
            2                안녕하
str[::-1] -거꾸로 출력


# --*-- coding:UTF-8 --*--
# name=input()
name=input('이름 >>')
# 입력받은 이름이 '이'이라면 이름앞에 '반장'을 출력
if name=='이':
    print('반장')
    print('및 조원')
print(name)
# --*-- coding:UTF-8 --*--
# name=input('이름 >>')
#
# if name=='이':
#     print('반장')
# else:
#     print('평민')
#     
# print(name)
# 조건식을 넣지 않았을 때 False판정인 상황에 대해)
# x=None #객체는 None(null)인 경우 False
# x=0 #int는 0인경우 False 아니면 True
# x=0.0 #float는 0.0인경우 False 아니면 True
# x='' #str은 ''인 경우 False
# x=[] #list는 []인 경우 False
# x=() #tuble은 ()인 경우 False
x={} #dict는 {}인 경우 False =>자바는 null이 나오지만  python은 판정을 내려준다.
if x:
    print('데이터형{}, {}값 존재'.format(type(x),x))
else:
    print('데이터형{}, {}값 존재하지  않음.'.format(type(x),x))
# --*-- coding:UTF-8 --*--
name=input('이름 : ')
star_cnt=0
if name=='이':
    print('반장')
    star_cnt=5
elif name=='이'or name=='박' or name=='오':
    print('조장')
    star_cnt=3
elif name=='김':
    print('디잘잘,면잘잘')
    star_cnt=2
else:
    print('평조원')
    star_cnt=1
    
print(name)
print('★' *star_cnt)
# --*-- coding:UTF-8 --*--
i=0
while i<10:
    print(i)
#     i+=1
    i=i+1
    
print('-'*60)
# 분기문 :break
i=0
while i<10:
    if i==5:
        break
    
    print(i)
    i+=1
# --*-- coding:UTF-8 --*--
# 인덱스 사용 range(시작값, 끝값, 증가값)
# 증가값을 사용하지 않으면 1씩 증가한다.
for i in range(1,10):
    print(i)
    
# 증가값 설정
print('-'*30)
for i in range(1,10,2):
    print(i)
    
# List, Tuple
print('-'*30)
nameList=['공','이','최','김','박']
for name in nameList:
    print(name)
    
print('-'*30)
nameTuple=('공','이','최','김','박')
for name in nameTuple:
    print(name)
  
# dict
print('-'*30)
langDict={'Java':'완벽한 OOP언어','HTML5':'마크업  언어-구조담당','CSS':'디자인 언어',
          'JavaScript':'스크립트  언어','Python':'수치연산에 강한 OOP언어'}
for k,v in langDict.items():
    print('key={}, value={}'.format(k,v))
    
    
    
print('-'*60)
#숫자 거꾸로 출력 reversed 함수 사용
for i in reversed(range(1,10)):
    print(i)
print('-'*60)
for i in range(2,10):
    for j in range(1,10):
        print('{}*{}={}'.format(i,j,i*j))
    
# --*-- coding:UTF-8 --*--
from builtins import str
str='ABCDEFG.txt'
#    0123456
print(str)
print(str[0:]) #시작부터 끝까지
print(str[2:5]) #특정위치만 자르기(끝인덱스 +1)
print(str[:5]) #시작부터 특정위치까지 자르기
print(str[::-1]) #글자 뒤집기
print(str[::2]) #시작부터 특정위치(배수)의 문자만 자르기
print(str[-3:]) #뒤에서 부터 특정자리까지만 자르기

 
*List
  • 가별길이형
  • 사용법) 
    • 초기값이 없는 List )
      •  변수명=list()
      • if 변수명 : 
        • 값이 있을때
      • else : 
        • 값이 없을때 
      • //로 사용.
    • 초기값이 존재하는 List )
      • 변수명=[값,,,,]
    • 값 추가 ) - 값이 뒤로 추가된다.
      • 변수명.append(값)
    • 값 삽입 ) - 인덱스에 해당하는 번째 방에 값을 넣을 수 있다.
      • 변수명.insert(인덱스, 값)
    • 크기 (방의수) )
      • len(변수명)
    • 삭제 )
      • 방의 내용 삭제 )
      • 변수명.remove(값)
      • 인덱스 삭제  //함수아니고 예약어
      • del 변수명[인덱스]
      • 모든방의 값 삭제
      • 변수명.clear()
    • 방안에 값의 갯수
      • 변수명.count(값)
    • 방에 값이 존재하는지
      • 값 in 변수명 =>True, False
    • 문자열을 List로 만들기
      • 변수명=list('문자열') =>['문', '자', '열']
    • split 
      • split은 특정문자로 구분하여 자르고 List로 저장
      • 변수명='문자열'.split('구분문자')
    • Slicing 지원
      • 변수명[시작인덱스 : 끝인덱스]
    • 결합 
      • n개의 List를 결합시킬 수 있다.
      • li1=['2','2','3']
      • li2=['4','5','4']
      • li3=li1+li2 =>['2','2','3','4','5'','4']
      •                          0 1 2 3 4 5
      • li3[1:5] =>2~5를 꺼낼 수 있다.
*Tuple
  • 빈 튜플을 생성할 수는 있지만 튜플은 고정값을 가져 값을 추가할 수 없다.
  • 값을 조작할 수 없다.(추가x, 삭제x)
  • 길이, 포함, 더하기 가능..?

*dict
  • 키와 값의 쌍으로 이루어진 데이터형
  • 사용 )
    • 빈 dict 생성 )
      • 변수명={ }
    • 값이 있는 dict 생성 )
      • 변수명={"키":"값", "키":"값",,,}
    • 값 추가 )
      • 변수명["키"] ="값"  //키가 유일해 키가 중복되면 값을 덮어쓴다.=>insert+update=upert
    • 값 삭제 )
      • del 변수명["키"]
    • //길이
      • len(변수명) ///아마도
    • //값 얻기
      • 변수명.get('키')
    • //모든 키 얻기
      • 변수명.keys()
    • //모든 값 얻기
      • 변수명.values()
    • //모든 키와 값 얻기 
      • 변수명.items()
    • //값 확인
      • '키' in 변수명


///쭉 코딩하다보니 코드 중복성이 높음=>낮추고 싶어서 함수를 사용하게 됨
*함수
  • //자바하고는 많이 다르다
  • 코드에 대한 중복을 줄이기 위해서 사용.
  • ///주의 함수명과 변수명이 같으면 둘다 객체이기 때문에 이전의 것은 사용하지 못한다.
  • 주의 : 함수명과 변수명이 같다면 먼저 선언된 것은 사용할 수 없다. (함수명과 변수명은 다르게 만들어야 한다.)
  • ///식별불가하기때문, 자바스크립트는 괄호로 구분하고 자바는 겹치지 않는다.
  • 함수의 내용이 없다면 Error발생.
  • ///파이썬은 접근지정자가 없다.
  • 접근지정자와 반환형이 없다. ///(자바스크립트의 function과 비슷)
  • ///뭐가 나갈지 몰라 반환형이 없는것 하고싶으면 return쓰면된다.
  • (pass를사용 //하면 에러가 나지 않는다.)
  • 문법 )
    • def 함수명(매개변수,,,,) : 
      • 내용
      •  
      •  
    • 함수가 끝나면 두줄정도 줄변경하여 다음코드를 정의하는걸 PEP8에서 권고
    • 호출 )
      • 함수명(값,,,)
  • 매개변수 사용 )
    • 매개변수에 기본값 사용가능  ///=>자바에는 없다
      • =>함수 호출시 값이 없다면 기본값으로 설정
      • def 함수명(매개변수명=값..):


      • 함수명() =>설정된 값
      • 함수명(값1) =>값1
    • variable Arguments   ///가변인자형->매개변수는 하난데 값을 여러개 넣어줄 수 있는것
      • def 함수명(*매개변수명) : 
      • //자바는 배열로 처리되지만 python은 tuple로 처리해준다.
        • *매개변수명=>tuple로 처리

      • 함수명()
      • 함수명(값,,,,)
    • Dict형태로 입력받기 )  ///=>값은 아닌데..?받는게 가능
      • def 함수명(**매개변수명)
          • **매개변수명=>dict
        •  
      • 함수명(이름=값, 이름=값,,,) =>으로 ["이름"]으로 값을 얻을수 있을것.


# --*-- coding:UTF-8 --*--
li1=list() # 비어있는 리스트 생성
li2=['Java','HTML','jQuery','JavaScript','CSS']
# print( len(li1) )
# print( len(li2) )
# 값추가
li1.append('1')
li1.append('''오늘은 목요일 입니다.
                내일은 금요일 입니다.''')
li1.append(5)
# 특정 위치에 값 추가
li1.insert(1, 9.45)
# 삭제-방의 내용으로
li2.remove('HTML')
# 삭제-방의 인덱스로
del li2[2]
# 모든 방의 값을 삭제
li2.clear()
print(li1)
print(li2)
# 문자열을 하나씩 잘라서 리스트에 추가
li3=list('Java JavaScript HTML CSS 노진경')
print(li3)
# 리스트 방의 값 갯수
a_cnt='a'
print('리스트에 {}의 갯수  {}'.format(a_cnt,li3.count(a_cnt)))
print(li3.count('노'))
# 리스트에 값이 존재하는지
# print('A' in li3)
if 'th' in li3:
    for val in li3:
        print(val)
else:
    print('li3에는 \'th\'가 존재하지 않습니다.')
    
# 여러개의 리스트 합치기
li4=['노','김','박']
li5=['김','최','이']
memberList=li4+li5
print(memberList)
# Slicing : memberList에서  박 부터 최까지만 잘라  얻기
print(memberList[2:5])
print(memberList[0::2])
print('이' in memberList)
# --*-- coding:UTF-8 --*--
# 빈튜플을 생성할 수 있지만 값을 추가할 수 없다.
# 빈 튜플을 생성할 수는 있지만 튜플은 고정값을 가져 값을  추가할 수 없다.
tu1=()
tu2=('1','2','3')
# 값을 조작할 수 없다.(추가x, 삭제x)
# tu1.append('김') #Error
# tu2.remove('2') #Error
print( len(tu1))
print( len(tu2)) #길이, 포함, 더하기 가능..?
tu3=('자바','오라클','자바스크립')
# Tuple에 대해 붙임연산을 수행할 수 있다.
tu4=tu3+tu2
print(tu4)
# --*-- coding:UTF-8 --*--
dic1={}
dic2={'김':'디자인',
      '김':'질문',
      '노':'얻어왔다.',
      '김':'아이언맨'
      }
# print(len(dic1))
# print(len(dic2))
# 값 추가
dic2['이']='햄버거가 좋아요!!'
dic2['이']='피자도 좋아요!!'
# 값 얻기 : 변수명.get('키') - 키가 없다면 None이 나온다.
print(dic2.get('노'))
print(dic2.get('박'))
# 값 얻기 : 변수명.get('키','None이었을때 반환할 값')
print(dic2.get('공','휴가사용 중'))
# 값 삭제
del dic2['김']
print(dic2)
# 모든 키 얻기 : keys()
print(dic2.keys())
# 모든 값 얻기 : values()
print(dic2.values())
# 모든 키와 값 얻기 : items()
print(dic2.items())
print('김' in dic2)
print('김' in dic2)
# --*-- coding:UTF-8 --*--
# 함수의 정의
from pkg_resources.extern import names
from test.test_importlib import test_namespace_pkgs
def test():
    print('test')
#     pass # 함수가 비면 Error -> pass로 Error를 방지해줌
    
#호출    
test()
#반환값이 존재하는 함수
def test1():
    name='이'
    
    return name #반환형은 없고 반환값이 있으면 필요에 따라  return사용 JavaScript처럼
name=test1()
print(name)
# 매개변수 있는 함수
def test2(name):
    print('이름 : '+str(name))
    
    
test2('김')    
# test2(9)    
# 매개변수의 기본값 사용
def test3(name='김',addr='강남구 역삼동',age=20):
    print("name:{}, addr:{},  age:{}".format(name,addr,age))
    
    
# test3()
# test3('박')
# test3('박','한독빌딩')
test3('박','한독빌딩',28)
print('-'*50)
#variable arguments
def test4(*names):
#     print(type(names))
    for name in names :
        print(name)
    
    
# test4()
test4('김','노','김','김')  #하나도,두개도,세개도,네개도 잘나온다.
print('-'*50)
#dict : 값을 입력할 때 '이름=값' 의 형식을 가져야 한다.
def test5(**info):
#     print(type(info))
    print(info)
    for k,v in info.items() :
        print(k,v)
    
    print(info.get('name'))
    
    
# test5()
test5(name='김',age=20,addr='서울시 동작구 동작동')
print('-'*50)
# 변수의 이름과 함수의 이름이 같다면 먼저 선언된 것은 사용할  수 없다.
def temp():
    print('temp!!!!!')
    
temp='미세먼지 나쁨'
# temp() #Error
print(temp)
print('-'*50)
# Overload가 되지 않는다.
def function():
    print('함수')
    
# def function(name='ddd'): # 만들수 없다 Error
#     print('함수!!!!') # 같은 이름의 함수를 만들 수  없다.
    
function()
    
    
    







반응형