python 简单实例训练(11~20)

11.题目:给定一个数,判断其 是否为素数。

程序分析:首先知道什么是素数?素数就是只能被1和它本身所整除的数。用常规思维,如果给定一个数是5,怎么判断呢?那就是判断range(2,5)这些数是否都能被5整除,如果还不懂,就要百度咯~~

方法一:用循环

# -*- coding: UTF-8 -*-
#判断素数
while True:
    x = input("请输入一个正整数:")
    i = 2      #除数当然要从 2 开始咯
    if x == 1:  #先判断一下你输入的是不是 1
        print "%d 不是素数也不是合数,请重新输入"%(x)
    elif x == 2: # 2 当然也不用循环了
        print "%d 是素数"%(x)
    else:       #大于 2 的情况
        while i < x:
            if x % i == 0:
                print "%d 不是素数"%(x)
                break
            i += 1
        if i == x:
            print "%d 是素数"%(x)

    输出:
    请输入一个正整数:53
    53 是素数
    请输入一个正整数:63
    63 不是素数
    请输入一个正整数:75
    75 不是素数
    请输入一个正整数:

方法二:定义函数的方法

# -*- coding: UTF-8 -*-
def isPrime(n):     # 如果是素数,返回True,不是素数返回False
    if n <= 1:
        return False   
    i = 2   
    while i*i <= n:   # 这里为了优化算法,故判断 i * i <= n
        if n % i == 0:
            return False   
        i += 1   
    return True 

print isPrime(9)
print isPrime(23)

 输出:False
      True

12.题目:判断1~100之间有多少个素数,并输出所有素数。

程序分析:上面已经知道了如何判断一个素数,这里就要练习了,找出素数并输出。只需要外面加一个循环就可以了。哈哈

方法一:在上题”方法一”源程序上直接改

# -*- coding: UTF-8 -*-
x = range(2,101)
n = 0
for j in x:
    i = 2  #除数从 2 开始,没问题吧?嘿嘿
    while i < j:
        if j % i == 0:
            break
        i = i + 1
    if i == j:
        n = n + 1
        print j
print "总共 %d 个素数" % (n)

 输出:2 3 5 7 11  13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
 总共  25 个素数

方法二:用两个数列去做,其实就是把方法一的 i = i + 1 改成range(2,j-1),这样更容易些,不过都是大同小异,主要是理解思路。

思路明白了,代码如下!

# -*- coding: UTF-8 -*-
n = 0
for j in range(2,101):
    fg = 0
     #为什么是 j - 1 呢?看下面的思路图就明白了,当然如果要求更优化的算法,也可换成 j / 2
    for i in range(2,j-1):
        if j % i == 0:
            fg = 1
            break
    if fg == 0:
        n = n + 1
        print j
print "总共 %d 个素数" % (n)

方法三:定义函数的方法

# -*- coding: UTF-8 -*-
def is_prime(n): 
    if n == 1:  
        return False  
    for i in range(2, n//2 + 1):  
        if n % i == 0:  
            return False  
        return True  

print(filter(is_prime, range(1, 101)))

备注:我写的这几种方法都比较通俗易懂,网上有很多用函数做的,刚开始我是看不懂的,所以我只用循环去做,这种方法对于初学者来说很有帮助,先打好基础为好,不要急。本人就是因为太着急,没打好基础就学后面的东西,导致什么都不会,所以不要急,慢慢来~~~,函数的方法可以看看,后面学到再讲。

13.题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

# -*- coding: UTF-8 -*-
for i in range(100,1000):
    x = i / 100
    y = i % 100 / 10
    z = i % 10
    if i == (x ** 3) + (y ** 3) + (z ** 3):
        print i

    输出:153
         370
         371
         407

14.题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

程序分析:这题就比较简单了,直接用判断语句 if 就可以了。

# -*- coding: UTF-8 -*-
while True:
    score = int(raw_input("请输入你的成绩:"))
    if score >= 90:
        print "你的成绩是 A"
    elif score >= 60:
        print "你的成绩是 B"
    else:
        print "你的成绩是 C"

15.题目:输出指定格式的日期。

程序分析:使用 datetime 模块。

# -*- coding: UTF-8 -*-
import datetime

if __name__ == '__main__':

# 输出今日日期,格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法
 print(datetime.date.today().strftime('%d/%m/%Y'))

备注:模块的内容暂时没有学到,到时候会整理相关文章,这个例子有兴趣的可以看一下,主要是常用,所以这里列出来了。看不懂没关系,模块后面在学,这题不会可以跳过了,哈哈!

16.题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:此题有两种方法,都用到了 while,具体看代码。

方法一:这种方法比较麻烦,建议后面再看,就是将数字和字母都列出来,利用 for 循环遍历。

# -*- coding: UTF-8 -*-
alpha = range(ord('A'),ord('Z')+1)
alpha.extend(range(ord('a'),ord('z')+1)) #前两行是定义alpha
all_alpha = [chr(v) for v in alpha]
digit_ord = range(ord('0'),ord('9')+1)
all_digit = [chr(v) for v in digit_ord]
x = raw_input("pls input a string:")
digit_num = 0
alpha_num = 0
other_num = 0
for v in x:
    if v in all_alpha:
        alpha_num += 1
    elif v in all_digit:
        digit_num += 1
    else:
        other_num += 1
print "字母=%d,数字=%d,其他 =%d"%(alpha_num,digit_num,other_num)

方法二:用使用类型统计函数的方法

# -*- coding: UTF-8 -*-
x = raw_input("pls input a string:")
intcount = 0
strcount = 0
othercount = 0
space = 0
for i in x:
    if i.isdigit():  #这个函数是用来判断数字类型的
        intcount += 1
    elif i.isalpha(): #用来判断字母类型
        strcount += 1
    elif i.isspace(): #用来判断空格
        space += 1
    else:
        othercount += 1  #其他字符类型
print "数字 = %d,字母=%d,空格 = %d,其他 = %d" %(intcount,strcount,space,othercount)

17.题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

程序分析:用数学的角度去考虑的时候,是不是觉得很简单?设每次的高度为 h,经过的长度为 s,那么

初始高度(长度) s = 100
第一次下落后弹起的高度 h = s / 2
经过的总长度 s = 100 + 2 * 50 + 2 * 25 + 2 * 12.5....

源代码:

# -*- coding: UTF-8 -*-
s = 100.0
h = s / 2
for i in range(1,11): #题目要求第十次的高度和总长度,所以要循环10次
    s = s + h * 2
    h = h / 2
print "总路程= %f,第十次反弹的高度=%f"%(s,h)

18.题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

程序分析:采取逆向思维的方法,从后往前推断。这个比较简单,只要静下心来理解,就非常容易了。

    设一共有y个桃,根据题目可得,
    第一天  day1 = x / 2 -1
    第二天 day2 = day1 / 2 -1
    ... 
    以此类推,可以得到猴子吃掉的桃子数和天数的关系表达式为 y = (x + 1) *2
    第十天是1个桃,那么回代即可。

源程序:
# -*- coding: UTF-8 -*-
x = 1 #第十天所剩的桃子,也是桃子初始值
for day in range(9,0,-1): 
    y = (x + 1) * 2
    x = y  #每次求得的桃子要作为 x 继续计算,因为是逆向思维哦!
print x

19.题目:打印出如下图案(菱形):

   *
  ***
 *****
*******
 *****
  ***
   *

程序分析:有三种方式哦,墙两种比较简单,直接用 print 就好啦!

方法一:最笨最简单的方法

# -*- coding: UTF-8 -*-
print "   *"
print "  ***"
print " *****"
print "*******"
print " *****"
print "  ***"
print "   *"

方法二:用到了center()函数,就是居中

# -*- coding: UTF-8 -*-
from string import center

print "*".center(7)
print "***".center(7)
print "*****".center(7)
print "*******".center(7)
print "*****".center(7)
print "***".center(7)
print "*".center(7)

方法三:这个~~~首先要学会stdout函数,然后看算法,无非就是计算空格数和 * 数,不算太难哦!看不懂就先不看了。不着急~

# -*- coding: UTF-8 -*-

from sys import stdout

for i in range(4):
    for j in range(2 - i + 1):
        stdout.write(' ')
    for k in range(2 * i + 1):
        stdout.write('*')
print     #此处的作用是换行,下同

for i in range(3):
    for j in range(i + 1):
        stdout.write(' ')
    for k in range(4 - 2 * i + 1):
        stdout.write('*')
print

20.题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

程序分析:学会分解出每一位数。

# -*- coding: UTF-8 -*-

x = int(raw_input("请输入一个数:\n"))
a = x / 10000
b = x % 10000 / 1000
c = x % 1000 / 100
d = x % 100 / 10
e = x % 10

if a != 0:
    print "5 位数:",e,d,c,b,a
elif b != 0:
    print "4 位数:",e,d,c,b,
elif c != 0:
    print "3 位数:",e,d,c
elif d != 0:
    print "2 位数:",e,d
else:
    print "1 位数:",e 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值