알쏭달쏭 공부한거 쓰기
HW5 과제 풀이 본문
## 아래 코드의 실행 결과를 예측하시오.> 내생각에는 필기시험 문제일것으로 예상된다.
###1.
```
for e in ['a', 1, 2, [3, 4]]:
print(e, end = ' ')
print()
```
예상)'a'12[3,4]
결과)a 1 2 [3, 4]
-변수가 아닌 문자라는 의미에서'a'를 쓰는것이므로 출력은 문자a가 나오는 것이다.
###2.
```
for e in ['a', 1, 2, [3, 4]]:
print('e', end = ' ')
print()
```
예상) 위에랑 같을것이다.
결과) e e e e
-받아들이는 값이 변수인지 문자열인지 판단하자.
###3.
```
for e in 'hello world':
print(e, end = '+')
print()
```
예상)h+e+l+l+o+ +w+o+r+l+d+
결과) h+e+l+l+o+ +w+o+r+l+d+
###4.
```
for x in range(2): #1
for y in range(ord('a'), ord('d')): #range(97,100)
print(x, chr(y))
print()
```
새로운 개념:
ord(문자): 해당문자에 해당하는 유니코드 값을 반환한다.
chr(정수): 해당유니코드 값에 해당하는 문자를 반환한다.
예상)
0,a
0,b
0,c
0,d
1,a
1,b
1,c
1,d
결과)
0 a
0 b
0 c
1 a
1 b
1 c
-range(97,100)이니까 범위는 97 98 99이다.
### 5.
```
m = 10
for x in 'python test 1, 2, 3!':
if x.isdigit()==True:
m *= int(x)
print(m)
```
예상)# 10*1*2*3
60
결과)
60
#문자열 1번 문제
## 1. 사용자로부터 휴대 전화 번호를 입력받아 아래와 같이 출력하는 프로그램을 작성하시오.
- 사용자 입력에 숫자가 아닌 문자가 있다면 다시 입력 받을 것.
- 번호가 010으로 시작하지 않는다면 다시 입력 받을 것.
- 입력 값 출력 시, 전화번호 끝자리는 4자리라고 간주한다.
---
실행 결과
```
휴대전화번호: 010-1234-5678
잘못된 전화번호입니다.
휴대전화번호: 0531234567
잘못된 전화번호입니다.
휴대전화번호: 01012345678
입력하신 번호는 010-1234-5678입니다.
```
sol)
while True:
user=input('휴대전화번호:')
#010-7571-4489
if user[:3]!='010':
print('잘못된 전화번호 입니다.')
elif user.isdigit()==False: #문자 하나씩 검사 안 하고 전체 검사 가능
print('잘못된 전화번호 입니다.')
else:
break
#user=01012345678
phone=[user[:3],user[3:-4],user[-4:]]
print(f"입력하신 번호는 {'-'.join(phone)}입니다.")
#join이랑 fstring 쓸 때 주의해야한다.
교수님)
while True:
phn_nbr = input('휴대전화번호:')
if phn_nbr.isdigit()==False:
print('[입력 오류] 번호는 숫자로만 입력바래요.')
elif phn_nbr[:3] != '010':
print('[입력 오류] 번호는 010으로 시작합니다.')
else:
print(f'입력하신 번호는 010-{phn_nbr[3:-4]}-{phn_nbr[-4:]}입니다.')
break
#day4 랜덤포듈 3번 문제
## 3. 알파벳, 숫자, 특수 문자로 구성된 8자리 임시 암호를 생성하는 프로그램을 작성하시오.
---
실행 결과
```
mV1Z8R&h
```
sol)
1)choice를 이용한 경우
def hw3():
a=[str(x) for x in range(1,10)]
#알파벳을 만들어보자
for i in range(ord('A'),ord('Z')+1):
a.append(chr(i))
#특수 문자 추가하쟈
for j in '!@#$%&*?/':
a.append(j)
for _ in range(8):
print(rd.choice(a),end='')
2)sample이용한 경우
2-1) 내가 짠 코드
#출력할떄마다 새로운 임시암호를 작성해야해
#숫자, 알파벳, 특수 구문을 포함하고 있는
#숫자를 만들어보자
#a=list(range(1,10))>이럴 경우 정수랑 문자열 둘다 포함되어 있어서 join이 작동하지 않는다.
a=[str(x) for x in range(1,10)]
#알파벳을 만들어보자
for i in range(ord('A'),ord('Z')+1): #range는 마지막 번호는 포함하지 않으니까
a.append(chr(i))
#특수 문자 추가하자
for j in '!@#$%&*?/':
a.append(j)
b=rd.sample(a,8)
print(b)
#b=''.join(b)#join은 원본을 안 바꿈 반환은 하는데..?b에 정수가 포함되어 있기 때문이다.
2-2) gpt가 짠거
def hw1():
a = list(range(1, 10))
for i in range(ord('A'), ord('Z')+1):
a.append(chr(i))
for j in '!@#$%&*?/':
a.append(j)
b = rd.sample(a, 8)
b = ''.join(map(str, b)) # 반환된 값을 문자열로 변환
print(b)
2-3)
def hw2():
a = list(range(1, 10))
for i in range(ord('A'), ord('Z')+1):
a.append(chr(i))
for j in '!@#$%&*?/':
a.append(j)
b = rd.sample(a, 8)
b = ''.join(str(x) for x in b) # 요소를 문자열로 변환
print(b)
2-4)
def 임시_암호_생성():
숫자 = [str(x) for x in (range(0, 10))]
알파벳 = [chr(i) for i in range(ord('A'), ord('Z')+1)]
특수문자 = list('!@#$%&*?/')
a = 숫자 + 알파벳 + 특수문자 #나는 append했는데 그냥 다 따로 list처리후 이렇게 더할 수도 있겠네
임시_암호 = ''.join(rd.sample(a, 8))
return 임시_암호
print(임시_암호()) #함수 안에는 print가 없으므로 호명시 반드시 print로 호명
2-5)
import random
import string
def 비밀번호_생성():
characters = string.ascii_letters + string.digits + string.punctuation
비밀번호 = ''.join(random.sample(characters, 8))
return 비밀번호
sol) 교수님
pw = '' #패스워드를 저장
#아래 반복문을 통해 한자리씩 생성하여 pw에 추가
#알파벳, 숫자, 특수문자(즉, 아스키 코드(0~127까지의 코드 값으로 표현 가능)로 표현될 수 있는 문자)로 구성되므로 0~127의 랜덤넘버 생성
for _ in range(8):
while True:
x = chr(rd.randrange(128))#0이상 128미만의 랜덤 넘버 생성 후 해당 코드값의 문자로 변환
#예) chr(97) = a-> chr(97)은 아스키 코드값이 97인 문자 a가 됨.
if x.isprintable()==True and x!=' ': #이 x가 출력가능한 문자이고, 공백이 아닌 경우에만 비밀번호로 인정.
break
pw += x #'a'+'b'='ab'와 동일한것 문자열 덧셈을 이용함
print('임시 암호:', pw)
6일차 실습 문제 -5.18
## 5.18 s_list = ['abc', 'bcd', 'bcdefg', 'abba', 'cddc', 'opq']와 같은 문자열을 가진 리스트가 존재한다. 이 리스트에 대하여 다음과 같은 기능을 구현하여라.
### 1) min() 함수나 sort() 메소드를 사용하지 말고, s_list 내의 문자열 항목중에서 가장 길이가 짧은 문자열을 출력하여라.
- 길이가 가장 짧은 문자열이 여러개 있을 경우 아래 출력과 같이 제일 먼저 나타나는 문자열을 출력하여라: 제일 나중에 나타나는 문자열은 어떻게 출력할까?
---
실행 결과
```
가장 길이가 짧은 문자열 : abc
```
sol)
s_list = ['abc', 'bcd', 'bcdefg', 'abba', 'cddc', 'opq']
short=s_list[0]
for i in s_list:
if len(short)>len(i):
short=i
print(f'가장 길이가 짧은 문자열:{short}')
### 2) 1) 번 문제에서 'abc', 'bcd', 'opq'의 세 문자열의 길이가 3으로 모두 같다. 이와 같이 문자열의 길이가 같을 경우 다음과 같이 가장 길이가 짧은 문자열 3개를 모두 출력하는 프로그램을 작성하여라. sort(key=len) 함수를 사용하여 길이에 따라 정렬한 후 코드를 작성하여라.
---
실행 결과
```
가장 길이가 짧은 문자열 : 'abc', 'bcd', 'opq'
``
sol)
s_list = ['abc', 'bcd', 'bcdefg', 'abba', 'cddc', 'opq']
#길이로 나열
s_list.sort(key=len)
shortlen=len(s_list[0])
short_stirng=[]
for string in s_list:
if len(string)==shortlen:
short_stirng.append(string)
else:
break
print(short_stirng)
sol-교수님)
s_list = ['hello', 'abc', 'bcd', 'bcdefg', 'abba', 'cddc', 'opq']
s_list.sort(key = len)
#길이가 가장 짧은 문자열이 3개인 걸 아는 경우
#print('길이가 가장 짧은 문자열:', s_list[:3])
print('길이가 가장 짧은 문자열: ', end = '')
min_len = len(s_list[0])
for word in s_list:
if len(word)==min_len:
print(word, end = ' ')
else: #길이순으로 정렬되어 있으므로 길이가 다른 게 나오면 가장 짧은 문자열은 모두 출력한 후이므로 반복 탈출
print()
break
-리스트에 하나씩 넣거나 또는 하나씩 출력하거나
cf)
내가 궁금한 것
문자열을 요소로 가진 list를 str로 하면 문자열이 합쳐진것이 나올까?
no
>>> a=['a','b','c']
>>> str(a)
"['a', 'b', 'c']"
'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글
중간고사 대비-hw별 문제풀이 가능여부 및 연습 (0) | 2023.07.03 |
---|---|
7/3 수업 중 작성 (0) | 2023.07.03 |
중간고사 족보 대비 (0) | 2023.07.03 |
7/2 python 내용 복습 (0) | 2023.07.02 |
7/1-python 수업 내용 (0) | 2023.07.02 |