230907_스터디노트

Sihyun Kim·2023년 9월 7일

with ~ as문

  • 파일 닫기 close()를 생락하기 위해 사용
file = open(uri+'hello.txt', 'a')
file.write('230907study')
file.close()

👆요걸, 요렇게👇 쓸 수 있다

with open(uri+'hello.txt', 'a') as f:
    f.write('230907study')

🎲 랜덤 숫자 뽑기 (1~50 중에 5개 뽑기)

import random
rNums = random.sample(range(1,51), 5)
print(rNums)

with ~ as문 (실습)

import random

uri = 'C:/pythontxt/'

def lottoNumbers(nums):
    for idx, num in enumerate(nums):
        with open(uri+'lotto.txt', 'a') as f:
            if idx < len(nums) - 2:
                f.write(str(num) + ', ')
            elif idx == len(nums):                    #리스트의 맨 끝숫자 뒤에는 콤마 없이
                f.write(str(num))
            elif idx > len(nums) -1:
                f.write('\n')
                f.write('bonus: '+ str(num))

rNums = random.sample(range(1,46), 7)
print(rNums)

lottoNumbers(rNums)
  • enumerate 두번째 등장인데 혼자서는 아직 무리..
    정답 설명하는거 따라서 코드 작성한 다음 해석하기 (머리로만 안되니까 쓰면서 해석)
  1. 변수에 리스트를 담아서 받아옴 (여기서는 random.sample로 랜덤 숫자 골라달라함)
  2. enumerate에 리스트를 넣고 돌리면 리스트에 담긴 애들 하나씩 무언가 처리를 하고 지나갈 수 있음
  3. 여기서는 리스트 사이에 콤마 ', ' 를 넣고 싶음
  4. idx는 여기서 0부터 6까지 매겨져있고
    idx 0,1,2,3,4까지는 뒤에 콤마가 필요함
    len(nums)는 7이고 7-2=5 니까, len(nums)-2 보다 idx가 작으면 콤마 찍기
  5. idx 5는 여섯번째 숫자 즉, 한 줄에 들어가는 마지막 숫자니까 콤마 안찍고 넘김
  6. idx 6은 일곱번째 숫자 즉, 보너스 숫자니까 한 줄 아래에 놓고 보너스 표시해줌
  • 아.. 이 생각들을 한번에 해서 코드를 작성해야 한단 말이지...? 🤪

writelines()

languages = ['c/c++', 'java', 'c#', 'python', 'javascript']

uri = 'C:/pythontxt/'
for item in languages:
    with open(uri+'languages.txt','a') as f:
        f.write(item)
        f.write('\n')

👇👇👇

languages = ['c/c++', 'java', 'c#', 'python', 'javascript']

uri = 'C:/pythontxt/'

with open(uri+'languages.txt','a') as f:
    f.writelines(item + '\n' for item in languages)

writeline() (실습)

  • ( ) 튜플
  • [ ] 리스트
  • { } 딕셔너리: key 값과 value 값!
uri = 'C:/pythontxt/'

scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
for key in scoreDic.keys():
    with open(uri + 'score.txt', 'a') as f:
        f.write(key + '\t:' + str(scoreDic[key]) + '\n')

🙋‍ 혹시 위 내용에서 리스트 모양 그대로 가지고 오고 싶다면?

uri = 'C:/pythontxt/'

scoreDic = {'kor': 85, 'eng': 90, 'mat': 92, 'sci': 79, 'his': 82}
with open(uri + 'score.txt', 'a') as f:
    print(scoreDic, file=f)
  • 튜플, 리스트, 딕셔너리에 대한 정의와 쓰임과 쓰는 방법에 대한 정리가 필요함
  • 딕셔너리에 있는 요소(?)들을 호출할 때는 key, 변수명[key] 이렇게 쓰는 듯

_readlines(), readline()

  • readlines(): 전체를 한번에 한줄로
  • readline(): 한줄만 한줄에, 전체를 다 보여주고 싶다면 while문 돌리기
  • readlines()
uri = 'C:/pythontxt/'

with open(uri+'languages.txt','r') as f:
    lanlist = f.readlines()

print(lanlist)
print(type(lanlist))

#결과
#['c/c++\n', 'java\n', 'c#\n', 'python\n', 'javascript\n']
#<class 'list'>
  • readline()
with open(uri+'languages.txt','r') as f:
    line = f.readline()

    while line != '': 			#라인이 비어있지 않다면
        print(line, end='') 	#print로 자동개행이 되므로 end=''로 개행을 막음  
        line = f.readline()

readline() (실습)

scoreDic = {}

uri = 'C:/pythontxt/'
with open(uri+'score.txt', 'r') as f:
    line = f.readline()

    while line != '':
        tempList = line.split(':')   #':' 앞뒤를 잘라줌
        scoreDic[tempList[0]] = int(tempList[1].strip('\n')) 	#헷갈리는 부분
        line = f.readline()			#이걸 여기 한번 더 써줘야 아랫줄들이 착착 나옴

print(f'scoreDic: {scoreDic}')
  • 이번에도 혼자서는 못 푸는 문제라 따라쓰고 해석하기
  • 이건 좀 이해가 안되니까 따로 메모
scoreDic[tempList[0]] = int(tempList[1].strip('\n')) 

tempList[0]은 과목명, templist[1]은 점수\n 을 뜻함
strip으로 뒤에 \n 을 삭제하는 건 잘 알겠으나,
scoreDic[과목명] = int(점수)를 하니까 {'과목명': 점수} 가 나오다니...

profile
문과이과예체능통합형인재

0개의 댓글