python简单实例训练(21~30)


Posted in Python onNovember 15, 2017

注意:我用的python2.7,大家如果用Python3.0以上的版本,请记得在print()函数哦!如果因为版本问题评论的,不做回复哦!!

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://3water.com/article/63672.htm

方法一:只用循环

# -*- 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  #换行咯

方法二:定义函数

# -*- 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

方法三:用列表 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+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+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://3water.com/article/128310.htm

2.lambda函数,看连接https://3water.com/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.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

程序分析:请抓住分子与分母的变化规律。可以看出,分母是斐波那契数列哦~

方法一:第一个分数的分子分母之和是第二个数的分子。

# -*- 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

方法二:

# -*- 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

方法三:

# -*- 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以内的数字相乘后,再加起来即可。

方法一:

# -*- 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

方法三:这里用定义函数的方法,使用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

这里补充一下map()函数的用法:

很简单,第一个参数接收一个函数名,第二个参数接收一个可迭代对象

# -*- 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=fn_1*4!递归的方法就是自己调用自己。

# -*- coding: UTF-8 -*-
def jiecheng(n):
 if n <= 1:
  return 1
 else:
  return n * jiecheng(n-1)
print jiecheng(5)

输出:120

28.题目:将所输入的5个字符,以相反顺序打印出来。

方法一:利用递归函数调用方式

# -*- 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)

输出:Input a string:1234
4
3
2
1

方法二:用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.题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

方法一:这个很简单吧,就是每次循环都加2,循环4次就好了啊!

# -*- coding: UTF-8 -*-
x = 10
for i in range(1,5):
 x = x + 2
print x

方法二:定义函数的方法

# -*- coding: UTF-8 -*-
def age(n):
 if n == 1: 
  x = 10
 else: 
  x = age(n - 1) + 2
 return x
print age(5)

29.题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

程序分析:将这个五位数从中间分开,根据对称性去切,然后比较是否相等。

# -*- 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的一些实例资料。

Python 相关文章推荐
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Python异常的检测和处理方法
Oct 26 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
python装饰器代替set get方法实例
Dec 19 Python
Python集合操作方法详解
Feb 09 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
python下10个简单实例代码
Nov 15 #Python
python获取多线程及子线程的返回值
Nov 15 #Python
python使用threading获取线程函数返回值的实现方法
Nov 15 #Python
python enumerate函数的使用方法总结
Nov 15 #Python
Python set常用操作函数集锦
Nov 15 #Python
python机器学习库常用汇总
Nov 15 #Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 #Python
You might like
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
JS实现切换标签页效果实例代码
2013/11/01 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python脚本实现格式化css文件
2015/04/08 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python 互换字典的键值对实例
2019/02/12 Python
详解python读取和输出到txt
2019/03/29 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
旷课检讨书大全
2014/01/21 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2014个人年度工作总结
2014/12/15 职场文书
学生自我评语
2015/01/04 职场文书
以权谋私检举信范文
2015/03/02 职场文书
义诊活动通知
2015/04/24 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL