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 相关文章推荐
Python文件操作类操作实例详解
Jul 11 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
Django中反向生成models.py的实例讲解
May 30 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
浅析python中numpy包中的argsort函数的使用
Aug 30 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python+opencv实现阈值分割
Dec 26 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
Aug 07 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python 代码运行时间获取方式详解
Sep 18 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 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下对字符串的递增运算代码
2010/08/21 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
对联广告js flash激活
2006/10/19 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Tornado 多进程实现分析详解
2018/01/12 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Apache部署Django项目图文详解
2019/07/30 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
送给程序员的20个Java集合面试问题
2014/08/06 面试题
2015年重阳节主持词
2015/07/04 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
python如何进行基准测试
2021/04/26 Python
Python Django ORM连表正反操作技巧
2021/06/13 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python