알쏭달쏭 공부한거 쓰기

7/1-python 수업 내용 본문

파이썬 -23여름학기(ㄱㅎㅈ)

7/1-python 수업 내용

elec_cy 2023. 7. 2. 11:35

#6월 30일  미니 테스트
-사용자로부터 정수나 단어 여러 개를 입력 받아, 중복을 제거한 결과를 출력하시오.
또 입력 값 중 정수들의 곱을 출력하는 프로그램을 작성하시오.
-단 중복은 대소문자를 무시하고 판단할 것. 예를 들어, 'abc'와 'aBC'는 중복으로 간주하고 둘 중 하나를 제거할 것
-정수들의 곱은 아래와 같이 식과 결과를 함께 출력할 것
 
정수나 단어 여러개:10 helllo Hello python HELLO 52 2 2
사용자 입력 값: ['10', 'helllo', 'Hello', 'python', 'HELLO', '52', '2', '2']
중복 제거한 입력: ['10', 'helllo', 'Hello', 'python', '52', '2']
중복 제거한 입력 중 정수들의 곱10*52*2=1040
 
ver1)
def mini():
    a=input('정수나 단어 여러개:').split()
    print('사용자 입력 값:',a)
    #중복 제거한 입력 작성
    b=a
   #['10', 'hello', 'Hello', 'python', 'HELLo', '52', '2', '2']
    #a랑 b랑 같은 주소에 연결되어 있어서 a변경시 b도 바뀐다.
    #이 경우에 a원소 제거시 앞으로 이동하면서 오류 생김

    for x in b:
        if x.lower() in [e.lower() for e in a]:
            #[ 'hello', 'Hello', 'python', 'HELLo', '52', '2', '2']
            #lower은 문자열에만 적용가능
            a.remove(x)
    print('중복 제거한 입력 :',a)
    #중복 제거한 입력 중 정수들의 곱
    
    num=[i for i in a if i.isdigit()==True]
     #if x.isdigit()==True{요소에 대해 숫자인지 판단해야하는데 계속 리스트를 넣음}
     sik='*'.join(num) #문자열로 반환
     c=1
     #오류 발생 for int(x) in num
     for x in num:    
        c*=int(x)
    print(f'중복 제거한 입력 중 정수들의 곱:{sik}={c}')
결과)
정수나 단어 여러개:10 hello Hello python HELLo 52 2 2
사용자 입력 값: ['10', 'hello', 'Hello', 'python', 'HELLo', '52', '2', '2']
중복 제거한 입력 : ['hello', 'python', '52', '2']
중복 제거한 입력 중 정수들의 곱:52*2=104
 
ver2)
  def mini():
    a=input('정수나 단어 여러개:').split()
    print('사용자 입력 값:',a)
    #중복 제거한 입력 작성
    b=a[:]#>이렇게 하는 경우에 
    #list 복사하는 방법
    #1)a.copy()
    #2)슬라이싱
    #3)list(리스트)
    #4)리스트 연산=[]+리스트
    
    for x in b:
        if x.lower() in [e.lower() for e in a]:
            a.remove(x)
    print('중복 제거한 입력 :',a)
    #중복 제거한 입력 중 정수들의 곱
    
    num=[i for i in a if i.isdigit()==True]
  #if x.isdigit()==True{요소에 대해 숫자인지 판단해야하는데 계속 리스트를 넣음}
    sik='*'.join(num)#문자열로 반환
    c=1
    #오류 발생 for int(x) in num
    for x in num:    
        c*=int(x)
    print(f'중복 제거한 입력 중 정수들의 곱:{sik}={c}')
결과)
정수나 단어 여러개:10 hello Hello python HELLo 52 2 2
사용자 입력 값: ['10', 'hello', 'Hello', 'python', 'HELLo', '52', '2', '2']
중복 제거한 입력 : []
중복 제거한 입력 중 정수들의 곱:=1
 b랑 a랑 요소가 같은데 b 요소 1개씩 넣어서 a에 당연히 있는데 다 지우면 없겠지
sol ver)
      def mini():
    a=input('정수나 단어 여러개:').split()
    print('사용자 입력 값:',a)
    #중복 제거한 입력 작성
    b=[]     
    for x in a:
        if x.lower() not in [e.lower() for e in b]:
            b.append(x)
    print('중복 제거한 입력 :',b)
    #중복 제거한 입력 중 정수들의 곱
    
    num=[i for i in b if i.isdigit()==True]
  #if x.isdigit()==True{요소에 대해 숫자인지 판단해야하는데 계속 리스트를 넣음}
    sik='*'.join(num)#문자열로 반환
    c=1
    for x in num:    
        c*=int(x)
    print(f'중복 제거한 입력 중 정수들의 곱:{sik}={c}')
결과)
정수나 단어 여러개:10 hello Hello python HELLo 52 2 2
사용자 입력 값: ['10', 'hello', 'Hello', 'python', 'HELLo', '52', '2', '2']
중복 제거한 입력 : ['10', 'hello', 'python', '52', '2']
중복 제거한 입력 중 정수들의 곱:10*52*2=1040
 
#day6 복습
## 4.24 임의의 문장들을 입력하면, 이 문장들에 포함된 단어를 모두 추출하여 사전 배열 순서로 정렬하여 출력하는 프로그램을 작성하여 다음과 같이 쉼표와 마침표 등과 같은 구두점들은 모두 제거하여 단어들을 추출하도록 작성하라.
---
실행 결과
```
여러 단어로 이루어진 글을 입력하세요: 임의의?문장을 입력:출력, 이것은!테스트;문장. 가:가나:나:나나:다람쥐 : 마린보이.
['가', '가나', '나', '나나', '다람쥐', '마린보이', '문장', '문장을', '이것은', '임의의', '입력', '출력', '테스트']
``` 
오류1)
    user=input('여러 단어로 이루어진 글을 입력하세요:')#'문자열'
    print(user)
    
    for i in list('",. :;!?'):
        user=user.split(i) 
    #split는 문자열에 대해서 적용한다. 
    #두번째부터 user가 list가 되면서 오류가 발생한다.
   for i in list('",. :;!?'):
        if i in user:
            #remover 리스트에 대해서 적용 현재 user는 문자열 
            #그럼 user을 리스트로 바꾸면 
            #>remove는 한개만 제거함으로 무한 반복 써야할 듯
            
        ///이런 경우에 user 리스트시 무엇을 공백으로 기준으로 분리하게 되면 :.,가 문자 사이에 끼면서 remove로 제거할 수 없게 된다.    
 sol)  def q4_24():
    user=input('여러 단어로 이루어진 글을 입력하세요:')#'문자열'
    print(user)
       
    for i in list('",. :;!?'):
        if i in user:
            user=user.replace(i,' ')#원본을 안바꿈
    user=user.split() #원본은 안바꿈
    print(sorted(user))
결과)
여러 단어로 이루어진 글을 입력하세요:임의의?문장을 입력:출력, 이것은!테스트;문장. 가:가나:나:나나:다람쥐 : 마린보이.
임의의?문장을 입력:출력, 이것은!테스트;문장. 가:가나:나:나나:다람쥐 : 마린보이.
['가', '가나', '나', '나나', '다람쥐', '마린보이', '문장', '문장을', '이것은', '임의의', '입력', '출력', '테스트']
 
day5## 1. 사용자로부터 입력 받은 문자열이 회문인지 판단하는 프로그램을 작성하시오.
 - 사용자가 quit(Quit, qUit, ...) 을 입력할 때까지 반복하여 판단한다.
 - 구두점, 따옴표, 공백, 대소문자를 무시하고 판단한다.  

실행 결과
```
문장: abcd
회문이 아닙니다.
문장: Mr. Owl ate my metal worm
회문입니다.
문장: "Do geese see God?"
회문입니다.
문장: quit
프로그램을 종료합니다.

```
오류)    
user=input('문장:')
    #1문장 quit입력할 때 까지 반복하여 판단해야함
    while user.lower()!='quit':
        #소문자화
        user=user.lower()
        #구둣점 제거
        for i in '!?.", ':
            user=user.replace(i,'')
        #회문판단
        if user==user[::-1]:
            print('회문입니다.')
        else:
            print('회문이 아닙니다.')
    print('프로그램을 종료합니다.')
    
#오류:입력 받은 문장이 while 밖에 있어서 다시 물어보지 않고 받은 문장으로만 판단+무한 반복:회문이아니라는 문장 무한 반복
#> 반복되는 구간이 어딘지 파악해서 while문 안에 넣어야한다.
오류2)
        while user.lower()!='quit':
        user=input('문장:')
        #소문자화
        user=user.lower()
        #구둣점 제거
        for i in '!?.", ':
            user=user.replace(i,'')
        #회문판단
        if user==user[::-1]:
            print('회문입니다.')
        else:
            print('회문이 아닙니다.')
    print('프로그램을 종료합니다.')
#오류: 이경우에는while의 조건의user가 앞에 없었기에> 앞에 user를 정의해주던가 아니면 while을 무한 반복문으로 만들어야 함.
 
sol)  user=''
    #1문장 quit입력할 때 까지 반복하여 판단해야함
    while user.lower()!='quit':
        user=input('문장:')
        #소문자화
        user=user.lower()
        #구둣점 제거
        for i in '!?.", ':
            user=user.replace(i,'')
        #회문판단
        if user==user[::-1]:
            print('회문입니다.')
        else:
            print('회문이 아닙니다.')
    print('프로그램을 종료합니다.')
#단점이 있음:
문장:quit
회문이 아닙니다.
프로그램을 종료합니다.

마지막 quit 입력시 회문임을 판단하고 프로그램을 종료한다. 이럴경우에는 while true문 후 if elif else가 가장 이상적일듯
sol2)
while True:
        user=input('문장:')
        #소문자화
        user=user.lower()
        #구둣점 제거
        for i in '!?.", ':
            user=user.replace(i,'')
        #회문판단
        if user==user[::-1]:
            print('회문입니다.')
        elif user.lower()=='quit':#user.lower()!='quit'아니면이니까 바로 break 걸린다.
            break
        else:
            print('회문이 아닙니다.')
    print('프로그램을 종료합니다.')
 
sol 교수님)
while True: 
        usr = input('문장: ')
        #문장이 quit인지 확인
        if usr.lower() =='quit': 
            print('프로그램을 종료합니다.')
            break
        #이까지 왔다는 말은 quit이 아니라는 뜻. 
        #구두점, 공백, 따옴표 제거+대소문자 무시할 수 있도록 문장 변경
        org = usr #원본 문장은 따로 저장해둠
        #구두점, 공백, 따옴표 제거
        for p in ' .,?!;:\"\'': 
            usr = usr.replace(p, '') #p를 제거: p를 빈문자열로 변경
            
        usr = usr.lower() #소문자로 변경
        
        #회문 확인
        if usr ==usr[::-1]: 
            print('회문입니다. ')
        else: 
            print('회문이 아닙니다. ')
 
결과
문장:abcd
회문이 아닙니다.
문장:Mr. Owl ate my metal worm
회문입니다.
문장:"Do geese see God?"
회문입니다.
문장:quit
프로그램을 종료합니다.

'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글

중간고사 대비-hw별 문제풀이 가능여부 및 연습  (0) 2023.07.03
7/3 수업 중 작성  (0) 2023.07.03
중간고사 족보 대비  (0) 2023.07.03
HW5 과제 풀이  (0) 2023.07.02
7/2 python 내용 복습  (0) 2023.07.02