알쏭달쏭 공부한거 쓰기
7/1-python 수업 내용 본문
#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 |