python 간단 한 실례 훈련(21~30)
11553 단어 python 인 스 턴 스
21.문제:하나의 정 수 를 질량 인 수 를 분해 합 니 다.예 를 들 어 90 을 입력 하고 90=2*3*3*5 를 출력 합 니 다.
프로그램 분석:n 에 대해 분해 질량 인 수 를 진행 하려 면 먼저 가장 작은 질량 k 를 찾 은 다음 에 다음 절차 에 따라 완성 해 야 한다.
(1)만약 에 이 질 수가 n 과 같다 면 질 인 수 를 분해 하 는 과정 이 이미 끝 났 음 을 설명 하고 인쇄 하면 된다.
(2)만약 n!=k.그러나 n 이 k 에 의 해 정 제 될 수 있 으 면 k 의 값 을 인쇄 하고 n 으로 k 를 나 누 는 업 체 를 새로운 정수 로 n 으로 하여 첫 번 째 단 계 를 반복 해 야 합 니 다.
(3)n 이 k 에 의 해 제거 되 지 않 으 면 k+1 을 k 의 값 으로 하고 첫 번 째 단 계 를 반복 합 니 다.
메모:format 라 는 함 수 를 알 아야 합 니 다.사실은 포맷 입 니 다.print 와 차이 가 많 지 않 습 니 다.구체 적 으로 참고 할 수 있 습 니 다https://www.jb51.net/article/63672.htm
방법 1:순환 만 사용
# -*- coding: UTF-8 -*-
while True:
n = input(" :")
# ,
print '{} = '.format(n),
#
if not isinstance(n, int) or n <= 0 :
print ' !'
# 1, 1
if n in [1] :
print '{}'.format(n)
while n >= 2:
for i in range(2,n + 1):
if n % i == 0:
n /= i #n n/i
if n == 1:
print i ,
else : # index
print '{} *'.format(i),
break
print #
방법 2:정의 함수
# -*- coding: UTF-8 -*-
def reduceNum(n):
print '{} = '.format(n),
if not isinstance(n, int) or n <= 0 :
print ' !'
exit(0)
elif n in [1] :
print '{}'.format(n)
while n not in [1] : #
for i in range(2, n + 1) :
if n % i == 0:
n /= i # n n/i
if n == 1:
print i
else : # i
print '{} *'.format(i),
break
reduceNum(100)
reduceNum(9)
출력:100 = 2 * 2 * 5 * 5
9 = 3 * 3
방법 3:목록 append 함수 로 모든 x 인 자 를 목록 으로 출력 합 니 다.
# -*- coding: UTF-8 -*-
while True:
x = input("pls input a number:")
ret = []
while x > 1:
for v in range(2,x + 1):
if x % v == 0:
ret.append(v)
x /= v
break
print ret
:
pls input a number:9
[3, 3]
설명:사실 두 가지 방법 은 대동소이 해서 별 차이 가 없다.22.제목:s=a+aa+aa+aa+aa...a 의 값 을 구 합 니 다.그 중에서 a 는 숫자 입 니 다.예 를 들 어 2+22+2222+22222(이때 모두 5 개의 수 를 더 함),몇 개의 수 를 더 하면 키보드 제어 가 있다.
프로그램 분석:관건 은 모든 항목 을 계산 하 는 것 이다.
# -*- coding: UTF-8 -*-
Tn = 0
Sn = [] #
n = int(raw_input(' n = :')) #
a = int(raw_input(' a = :')) #
for count in range(n):
Tn = Tn + a
a = a * 10
Sn.append(Tn)# Sn
print Tn
#lambda ,
Sn = reduce(lambda x,y : x + y,Sn)
print Sn
원 하 는 숫자 를 입력 하 십시오 n=:5숫자 입력 a=:6
6
66
666
6666
66666
74070
사용 한 함수:
1.python 의 reduce 내 건 함 수 는 이원 조작 함수 입 니 다.그 는 하나의 데이터 집합(링크,모듈 등)중의 모든 데 이 터 를 다음 과 같이 조작 합 니 다.reduce 에 전 달 된 함수 func()(하나의 이원 조작 함수 여야 합 니 다)로 먼저 집합 중의 1,2 개의 데 이 터 를 조작 하고 얻 은 결 과 는 세 번 째 데이터 와 func()함수 로 연산 합 니 다.마지막 으로 결 과 를 얻다.
구체 적 으로 참고 가능https://www.jb51.net/article/128310.htm
2.lambda 함수,연결 보기https://www.jb51.net/article/128311.htm
23.문제:하나의 수가 그 인자 의 합 과 같다 면 이 수 를'완수'라 고 부른다.예 를 들 어 6=1+2+3.프로 그래 밍 은 1000 이내 의 모든 완 수 를 찾 습 니 다.
프로그램 분석:프로그램 Python 연습 실례 14 를 참조 하 십시오.뒤에 판단 조건 만 더 하면 됩 니 다.주의 하 세 요.출력 인자 에 1 을 더 해 야 합 니 다.문 제 를 잘 보 세 요.1 은 그 어떠한 수의 인자 이기 때문에 빠 뜨 려 서 는 안 됩 니 다.
# -*- coding: UTF-8 -*-
import random
import time
while True:
x = random.randint(1,1000)
# x , x
s = x
factors = [1] #1
while x > 1:
# x, x ,
for v in range(2,x + 1):
if x % v == 0:
factors.append(v)
# ,
x /= v
# break , break for
break
print " %s, "%(factors),
if sum(factors) == s: #
print "%d "%(s)
else:
print "%d "%(s)
time.sleep(1) # ,
출력:모든 인 자 는[1,2,2,2,31]이기 때문에 248 은 정수 가 아니다.
모든 인 자 는[1,2,2,2,73]이기 때문에 584 는 정수 가 아니다.
모든 인 자 는[1,823]이기 때문에 823 은 정수 가 아니다.
모든 인 자 는[1,281]이기 때문에 281 은 정수 가 아니다.
모든 인 자 는[1,467]이기 때문에 467 은 정수 가 아니다.
모든 인 자 는[1,2,359]이기 때문에 718 은 정수 가 아니다.
모든 인 자 는[1,2,7,47]이기 때문에 658 은 정수 가 아니다.
모든 인 자 는[1,751]이기 때문에 751 은 정수 가 아니다.
모든 인 자 는[1,3,71]이기 때문에 213 은 정수 가 아니다.
24.제목:두 탁구 팀 이 경 기 를 하고 세 명 씩 낸다.갑 팀 은 a,b,c 세 명,을 팀 은 x,y,z 세 명 이다.이미 추첨 하여 경기 명단 을 결정 하 였 다.누군가가 선수 에 게 경기 의 명단 을 물 었 다.a.그 는 x 와 비교 하지 않 는 다 고 합 니 다.c 는 x,z 와 비교 하지 않 는 다 고 합 니 다.프로그램 을 짜 서 세 팀 의 선수 명단 을 찾 아 주세요.
프로그램 분석:수학 적 으로 이해 하기 쉽 죠?그런데 여기 알파벳 을 ASCII 코드 로 바 꿔 서 해 야 돼 요!
# -*- coding: UTF-8 -*-
for i in range(ord('x'),ord('z') + 1):
for j in range(ord('x'),ord('z') + 1):
if i != j:
for k in range(ord('x'),ord('z') + 1):
if (i != k) and (j != k):
if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
print 'order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k))
25.문제:1/2,3/2,5/3,8/5,13/8,21/13............................................................프로그램 분석:분자 와 분모 의 변화 규칙 을 잡 으 세 요.분 모 는 피 보 나치 수열 임 을 알 수 있 습 니 다.
방법 1:첫 번 째 분수 의 분자 분모 의 합 은 두 번 째 수의 분자 이다.
# -*- coding: UTF-8 -*-
a = 2.0 #
b = 1.0 #
s = 0 # 20
for n in range(1,21):
s += a / b
t = a # t
a = a + b #
b = t #
print s
방법 2:
# -*- coding: UTF-8 -*-
a = 2.0
b = 1.0
s = 0.0
for n in range(1,21):
s += a / b
b,a = a , a + b
print s
방법 3:
# -*- coding: UTF-8 -*-
a = 2.0
b = 1.0
l = []
for n in range(1,21):
b,a = a,a + b
l.append(a / b)
print reduce(lambda x,y: x + y,l)
26.제목:1+2!+3!+…+20!의 합.프로그램 분석:이 프로그램 은 누 가 를 누 승 으로 만 들 었 을 뿐이다.계단 을 생각해 보면 어떻게 계산 합 니까?n!=n×(n-1)×(n-2)×(n-3)×…×1.따라서 하나의 옮 겨 다 니 며 n 이내 의 숫자 를 곱 한 후에 더 하면 됩 니 다.
방법 1:
# -*- coding: UTF-8 -*-
n = 0
s = 0
t = 1
for n in range(1,21):
t *= n # t 20
s += t # s
print '1! + 2! + 3! + ... + 20! = %d' % s
방법 3:여 기 는 함 수 를 정의 하 는 방법 으로 sum 함 수 를 사용 합 니 다.
# -*- coding: UTF-8 -*-
s = 0
l = range(1,21)
def op(x):
r = 1
for i in range(1,x + 1):
r *= i
return r
s = sum(map(op,l))
print '1! + 2! + 3! + ... + 20! = %d' % s
출력:1!+2! + 3! + ... + 20! = 2561327494111820313여기에 맵()함수 의 용법 을 보충 합 니 다.
간단 합 니 다.첫 번 째 매개 변 수 는 함수 명 을 받 고 두 번 째 매개 변 수 는 교체 가능 한 대상 을 받 습 니 다.
# -*- coding: UTF-8 -*-
ls = [1,2,3]
rs = map(str, ls)
# ['1', '2', '3']
lt = [1, 2, 3, 4, 5, 6]
def add(num):
return num + 1
rs = map(add, lt)
print rs
# [2,3,4,5,6,7]
27.문제:재 귀 방법 으로 5!프로그램 분석:귀속 공식:fn=fn1*4!재 귀 하 는 방법 은 스스로 자신 을 호출 하 는 것 이다.
# -*- coding: UTF-8 -*-
def jiecheng(n):
if n <= 1:
return 1
else:
return n * jiecheng(n-1)
print jiecheng(5)
:120
28.제목:입력 한 5 자 를 반대 순서 로 출력 합 니 다.방법 1:재 귀 함수 호출 방식 이용
# -*- coding: UTF-8 -*-
def output(s,l):
if l==0:
return
print (s[l-1])
output(s,l-1)
s = raw_input('Input a string:')
l = len(s)
output(s,l)
출력:문자열 입력:12344
3
2
1
방법 2:reverse 함수 로
# -*- coding: UTF-8 -*-
a = [1,2,3,4,5]
a.reverse()
print a
:
# -*- coding: UTF-8 -*-
s = list(raw_input('Input a string:'))
s.reverse()
print s
28.문제:다섯 명 이 앉 아서 다섯 번 째 사람 이 몇 살 이 냐 고 물 었 다.그 는 네 번 째 사람 보다 두 살 많다 고 말 했다.네 번 째 사람 에 게 나 이 를 물 었 더 니 세 번 째 사람 보다 두 살 많다 고 했다.세 번 째 사람 에 게 물 었 더 니 두 번 째 사람 보다 두 살 많다 고 한다.두 번 째 사람 에 게 물 어 보 니 첫 사람 보다 두 살 많다 고 한다.마지막 으로 첫 번 째 사람 에 게 물 었 더 니 10 살 이 라 고 했다.다섯 번 째 사람 은 몇 살 입 니까?프로그램 분석:재 귀 하 는 방법 을 이용 하여 재 귀 는 회 추 와 전달 두 단계 로 나 뉜 다.다섯 번 째 사람의 나 이 를 알 고 싶다 면 네 번 째 사람의 나 이 를 알 고 순서대로 유추 해 첫 번 째 사람(10)으로 미 루 고 다시 미 뤄 야 한다.
방법 1:이 건 간단 하 죠?순환 할 때마다 2 를 넣 고 4 번 순환 하면 되 잖 아 요!
# -*- coding: UTF-8 -*-
x = 10
for i in range(1,5):
x = x + 2
print x
방법 2:함 수 를 정의 하 는 방법
# -*- coding: UTF-8 -*-
def age(n):
if n == 1:
x = 10
else:
x = age(n - 1) + 2
return x
print age(5)
29.문제:한 다섯 자리 숫자 로 그것 이 회 문수 인지 아 닌 지 를 판단 한다.즉 12321 은 답문 수로 개 위 는 만 위 와 같 고 10 위 는 천 위 와 같다.프로그램 분석:이 다섯 자 리 를 중간 에서 나 누 어 대칭 성에 따라 자 른 다음 에 일치 하 는 지 비교 합 니 다.
# -*- coding: UTF-8 -*-
a = int(raw_input(" :"))
x = str(a)
flag = True
for i in range(len(x)/2):
if x[i] != x[-i - 1]: # , ,
flag = False
break
if flag:
print "%d !" % a
else:
print "%d !" % a
출력:숫자 를 입력 하 십시오:
15651
15651 은 하나의 회 문수 다!
30.문제:요일 의 첫 번 째 자 모 를 입력 하여 요일 을 판단 하 세 요.첫 번 째 자모 가 같 으 면 두 번 째 자 모 를 계속 판단 하 세 요.
프로그램 분석:상황 문 구 를 사용 하 는 것 이 좋 습 니 다.첫 번 째 자모 가 같 으 면 상황 문 이나 if 문 구 를 사용 하여 두 번 째 자 모 를 판단 합 니 다.와,이 문 제 는 정말 간단 할 것 같 아 요~요일 의 단어 들 이 어떤'Monday Tuesday Wednesday Thursday Friday Saturday Sunday'가 있 는 지 먼저 보 세 요.모든 것 은'T'와'S'만 두 번 째 알파벳 을 판단 해 야 합 니 다.
# -*- coding: UTF-8 -*-
letter = raw_input("please input:")
#while letter != 'Y':
if letter == 'S':
print ('please input second letter:')
letter = raw_input("please input:")
if letter == 'a':
print ('Saturday')
elif letter == 'u':
print ('Sunday')
else:
print ('data error')
elif letter == 'F':
print ('Friday')
elif letter == 'M':
print ('Monday')
elif letter == 'T':
print ('please input second letter')
letter = raw_input("please input:")
if letter == 'u':
print ('Tuesday')
elif letter == 'h':
print ('Thursday')
else:
print ('data error')
elif letter == 'W':
print ('Wednesday')
else:
print ('data error')
이 글 은 여기까지 소개 되 었 습 니 다.그 다음 에 저희 편집장 은 python 에 관 한 인 스 턴 스 자 료 를 계속 공유 할 것 입 니 다.