Python 100例(上)

如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边。别嫌麻烦,因为都是从麻烦到简单的。

实例1:

题目:有1、2、3、4个数字,能组成多少个相互不同且无重复的三位数?都是多少? 

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
'''
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i != j) and (i != k) and (k != j):
                print i, j, k
实例1

输出结果:

1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
View Code

 实例2:

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提成10%; 利润高于10万,低于20万时,低于10万的部分按10%提成,高于10万部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:
0-10万提成10%
10-20万提成7.5%
20-40万提成5%
40-60万提成3%
60-100万提成1.5%
100万以上1%
思路:
请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
'''
'''
注:如果列表的顺序相反,计算结果不一样
'''
i = int(raw_input('input:'))
m = [1000000,600000,400000,200000,100000,0]
t = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for s in range(0,6):#循环列表元素数
    if i>m[s]:#判断输入的元素
        r+=(i-m[s])*t[s]
        print (i-m[s])*t[s]
        i=m[s]
print r
View Code

 输出结果:

输入您的利润:300000
5000.0
7500.0
10000.0
22500.0
View Code

 实例3:

 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该书是多少?

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:判断一个数加100是一个数的完全平方数,加168是另一个数的完全平方数。
思路:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:
'''
import math
for i in range(10000):
    x = int(math.sqrt(i + 100))
    y = int(math.sqrt(i + 168))
    if (x * x == i + 100) and (y * y == i + 168):
        print i
View Code

 输出结果:

156
View Code

 实例4:

题目:输入某年某年某月某日,判断这一天是这一年的第几天?

!/usr/bin/env  python
# --*--coding:utf-8 --*--
'''
需求:判断输入的日期是本年的第几天
思路:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊       情况,闰年且输入月份大于3时需考虑多加一天:
'''
year = int(raw_input('year:\n'))
month = int(raw_input('month:\n'))
day = int(raw_input('day:\n'))

months = [0,31,59,90,120,151,181,212,243,273,304,334]
if 0 <= month <= 12:#判断输入的月份
    sum = months[month - 1]
else:
    print 'data error'
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):#判断是平年还是润年
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print 'it is the %dth day.' % sum
View Code

输出结果:

year:
2015
month:
12
day:
13
it is the 347th day.
View Code

 实例5:

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:输入三个整数,有小到大进行排序
思路:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
'''
m = []
for i in range(0,3):
    n = int(raw_input('input:'))
    m.append(n)
m.sort()#从小到大排序
#
m.sort(reverse = True)#从大到小排序
print m
View Code

 输出结果:

input:3
input:7
input:1
[1, 3, 7]
View Code

 实例6:

题目:斐波那契数列。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:斐波那契数列:0、1、1、2、3、5、8、13、21、34、……。输出第100个斐波数
思路:根据数列规律可以得出下一个数值都是前两个数值的和
'''
'''
方法一:
'''
def fib(n):
    a,b = 1,1
    for i in range(n-1):
        a,b = b,a+b
    return a#返回第100个斐波那契数列
print fib(100)
'''
方法二:
'''
def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n-1)+fib(n-2)
print fib(100)#如果输出的结果太大的话会消耗cpu建议小点
'''
方法三:
'''
def fib(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1, 1]
    fibs = [1, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs

# 输出前 10 个斐波那契数列
print fib(100)
View Code

 输出结果:

354224848179261915075
View Code

 实例7:

题目:将一个列表的数据复制到另一个列表中。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
将一个列表的数据复制到另一个列表里
'''
a = [1,2,3,4,5,6,7,8,9,0]
b = a[:]
print b
View Code

 输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
View Code

 实例8:

题目:输出9*9乘法口诀表。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:99乘法口诀表
思路:分行与列考虑,共9行9列,i控制行,j控制列。
'''
for i in range(1,10):
    for j in range(1,10):
        result = i * j
        print '%d * %d = % - 3d'% (i,j,result)#循环的两个数相乘
        print ''#两个循环的间隔
View Code

 输出结果:

1 * 1 =  1 

1 * 2 =  2 

1 * 3 =  3 

1 * 4 =  4 

1 * 5 =  5 

1 * 6 =  6 

1 * 7 =  7 

1 * 8 =  8 

1 * 9 =  9 

2 * 1 =  2 

2 * 2 =  4 

2 * 3 =  6 

2 * 4 =  8 

2 * 5 =  10

2 * 6 =  12

2 * 7 =  14

2 * 8 =  16

2 * 9 =  18

3 * 1 =  3 

3 * 2 =  6 

3 * 3 =  9 

3 * 4 =  12

3 * 5 =  15

3 * 6 =  18

3 * 7 =  21

3 * 8 =  24

3 * 9 =  27

4 * 1 =  4 

4 * 2 =  8 

4 * 3 =  12

4 * 4 =  16

4 * 5 =  20

4 * 6 =  24

4 * 7 =  28

4 * 8 =  32

4 * 9 =  36

5 * 1 =  5 

5 * 2 =  10

5 * 3 =  15

5 * 4 =  20

5 * 5 =  25

5 * 6 =  30

5 * 7 =  35

5 * 8 =  40

5 * 9 =  45

6 * 1 =  6 

6 * 2 =  12

6 * 3 =  18

6 * 4 =  24

6 * 5 =  30

6 * 6 =  36

6 * 7 =  42

6 * 8 =  48

6 * 9 =  54

7 * 1 =  7 

7 * 2 =  14

7 * 3 =  21

7 * 4 =  28

7 * 5 =  35

7 * 6 =  42

7 * 7 =  49

7 * 8 =  56

7 * 9 =  63

8 * 1 =  8 

8 * 2 =  16

8 * 3 =  24

8 * 4 =  32

8 * 5 =  40

8 * 6 =  48

8 * 7 =  56

8 * 8 =  64

8 * 9 =  72

9 * 1 =  9 

9 * 2 =  18

9 * 3 =  27

9 * 4 =  36

9 * 5 =  45

9 * 6 =  54

9 * 7 =  63

9 * 8 =  72

9 * 9 =  81
View Code

实例9:

题目:暂停一秒输出。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
暂停以秒输入
'''
import time
myD = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e', 6:'f', 7:'g'}
for key,value in dict.items(myD):
    print key,value
    time.sleep(1)#暂停一秒
View Code

 输出结果:

1 a
2 b
3 c
4 d
5 e
6 f
7 g
View Code

 实例10:

题目:暂停一秒输入。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
暂停一秒输出
'''
import time
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
time.sleep(1)
print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
View Code

 输出结果:

2016-01-10 23:43:17
2016-01-10 23:43:18
View Code

 实例11:

 题目:古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:一对兔子,从出生后第三个月起每个月都会生出一对兔子,小兔子长到三个月又生一对小兔子。假如兔子不死,问每个月兔子总数。
思路:兔子的规律为数列1,1,2,3,5,8,13,21....
'''
f1 = 1
f2 =2
for i in range(1,21):
    print '%12d %12d' % (f1,f2)
    if (i % 2) == 0:
        print ''
    f1 = f1 + f2
    f2 = f1 + f2
View Code

 输出结果:

           1            2
           3            5

           8           13
          21           34

          55           89
         144          233

         377          610
         987         1597

        2584         4181
        6765        10946

       17711        28657
       46368        75025

      121393       196418
      317811       514229

      832040      1346269
     2178309      3524578

     5702887      9227465
    14930352     24157817

    39088169     63245986
   102334155    165580141
View Code

 实例12:

题目:判断101-200之间有多少个素数,并输出所有素数。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:判断101-200之间的所有素数,并输出
思路:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
'''
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(0,201):
    k = int(sqrt(m + 1))
    for i in range(2,k + 1):
        if m % i == 0:
            leap = 0
            break
    if leap == 1:
        print '%-4d' % m
        h += 1
        if h % 10 == 0:
            print ''
    leap = 1
print 'The total is %d' % h
View Code

 输出结果:

0   
1   
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  
101 
103 
107 

109 
113 
127 
131 
137 
139 
149 
151 
157 
163 

167 
173 
179 
181 
191 
193 
197 
199 
The total is 48
View Code

 实例13:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:打印所有“水印数”,例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
思路:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
'''
for n in range(100,1000):
    i = n / 100 #百位数
    j = n / 10 % 10 #十位数
    k = n % 10  #个位数
    if n == i ** 3 + j ** 3 + k ** 3:
        print n
View Code

 输出结果:

153
370
371
407
View Code

 实例14:

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5.

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
'''
from sys import stdout
n = int(raw_input("input number:"))
print "n = %d" % n
for i in range(2,n + 1):
    while n != i:
        if n % i == 0:
            stdout.write(str(i))
            stdout.write("*")
            n = n / i
        else:
            break
print "%d" % n
View Code

 输出结果:

input number:100
n = 100
2*2*5*5
View Code

 实例15:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:利用条件运算符的嵌套来完成成绩表。
思路:(a>b)?a:b这是条件运算符的基本例子。
'''
score = int(raw_input('input score:'))
if score >= 90:
    grade = 'A'
elif score >= 80:
    grade = 'D'
elif score >= 70:
    grade = 'C'
elif score >= 60:
    grade = 'D'
else:
    grade = 'E'
print '%d belongs to %s' % (score,grade)
View Code

 输出结果:

input score:26
26 belongs to E
View Code

实例16:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
输入指定格式的日期
'''
import datetime
if __name__ == '__main__':#输出今日日期,格式为dd/mm/yyyy.更改选项可以查看strftime()方法。
    print(datetime.date.today().strftime('%d/%m/%Y'))
    #创建日期对象
    miyazakiBirthDate = datetime.date(1941, 1, 5)
    print(miyazakiBirthDate.strftime('%d/%m/%Y'))
    #日期算术运算
    miyazakiBirthDextDate = miyazakiBirthDate + datetime.timedelta(days=1)#加一天
    print(miyazakiBirthDextDate.strftime('%d/%m/%Y'))
    #日期替换
    miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)#加一年
    print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
View Code

 输出结果:

11/01/2016
05/01/1941
06/01/1941
05/01/1942
View Code

 实例17:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:输入一行字符,分别统计出其中英文字母、空格,数字和其他字符的个数。
思路:利用while语句,条件为输入的字符
'''
import string
s = raw_input('input a string:')
letters = 0
space = 0
digit = 0
others = 0
for c in s:
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print('char = %d, space = %d,digit = %d,others = %d' % (letters,space,digit,others))
View Code

 输出结果:

input a string:sffq265233!!0aff  dd g
char = 10, space = 3,digit = 7,others = 2
View Code

 实例18:

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+222...2(此时共有5个数相加),几个数相加有键盘控制。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
思路:先计算出每一项的值。
'''
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)
    print Tn
Sn = reduce(lambda x,y : x + y,Sn)#在计算和
print Sn
View Code

 输出结果:

n = :9
a = :6
6
66
666
6666
66666
666666
6666666
66666666
666666666
740740734
View Code

 实例19:

 题目:一个数如果恰好等于它的因子之和,这个数就称为“壳数”。例如6=1+2+3,编程找出1000以内的所有完数。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:找出1000以内的完数,完数就是一个数如果恰好等于它的因子之和,例如:6=1+2+3
思路:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数各个位之和恰等于n,则说明分解质因数的过程已经结束,打印出即可。
'''
from sys import stdout
for j in range(2,1001):
    k = []
    n = -1
    s = j
    for i in range(1,j):
        if j % i == 0:
            n += 1
            s -= i
            k.append(i)
    if s == 0:
        print j
        for i in range(n):
            stdout.write(str(k[i]))
        print k[n]
View Code

 输出结果:

6
123
28
124714
496
1248163162124248
View Code

 实例20:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
'''
Sn = 100.0
Hn = Sn / 2
for n in range(2,11):
    Sn += 2 * Hn
    Hn /= 2
print 'Total of road is %f' % Sn
print 'The tenth is %f meter' % Hn
View Code

 输出结果:

Total of road is 299.609375
The tenth is 0.097656 meter
View Code

 实例21:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
思路:采用逆向思维的方法,从后在往前推断
'''
x2 = 1
for day in range(9,0,-1):
    x1 = (x2 + 1) * 2
    x2 = x1
print x1
View Code

 输出结果:

1534
View Code

 实例22:

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

*

      ***

    ******

      ***

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:打印出如下图案(菱形):
   *
  ********************
  ***
   *
思路:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
'''
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
View Code

输出结果:

   *
  ***
 *****
*******
 *****
  ***
   *
View Code

 实例23:

 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
思路:根据分子和分母的变化可以发现一些规律。(第三个数的分子和分母,是前两个分子和分母之和)
'''
'''
方法一:
'''
a = 2.0
b = 1.0
s = 0
for n in range(1,21):
    s += a / b
    t = a
    a = a + b
    b = t
print s
'''
方法二:
'''
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

s = 0.0
for n in range(1,21):
    s += a / b
    b,a = a , a + b
print s
'''
方法三:
'''
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)
View Code

 输出结果:

32.6602607986
32.6602607986
32.360679776
32.2782947888
View Code

 实例24:

 题目:两个兵乓球队进行比赛,各出三人。甲队为a,b,c三人,乙对为x,y,z三人。以抽签决定比赛名单。有向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程找到三队赛手的名单。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
思路:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
'''
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))
View Code

 输出结果:

order is a -- z     b -- x    c -- y
View Code

 实例25:

题目:求1+2!+3!+...+20!的和。 

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:求1+2!+3!+...+20!的和。
思路:此程序只是把累加变成了累乘。
'''
'''
方法一:
'''
n = 0
s = 0
t = 1
for n in range(1,21):
    t *= n
    s += t
print '1! + 2! + 3! + ... + 20! = %d' % s
''''
方法二:
'''
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
View Code

输出结果:

1! + 2! + 3! + ... + 20! = 2561327494111820313
1! + 2! + 3! + ... + 20! = 2561327494111820313
View Code

 实例26:

题目:利用递归方法求5!。 

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:利用递归方法求5!。
思路:递归公式:fn = fn_1*4!
'''
def fact(j):
    sum = 0
    if j == 0:
        sum = 1
    else:
        sum = j * fact(j - 1)
    return sum
for i in range(5):
    print '%d! = %d' % (i,fact(i))
View Code

 输出结果:

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
View Code

 实例27:

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
'''
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)
View Code

 输出结果:

Input a string:123544
4
4
5
3
2
1
View Code

 实例28:

 题目:有5个人坐在一起,问第五个人多少岁?他说比第四个人大两岁。问第四个人岁数,他说比第三个人大两岁。问第三个人,又说比第二个人大两岁。问第二个人,说比第二个人大两岁。最后问第一个,他说是十岁。请问第五个人多大?

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
思路:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
'''
def age(n):
    if n == 1:
        c = 10
    else:
        c = age(n-1) + 2
    return c
print age(5)
View Code

 输出结果:

18
View Code

 实例29:

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

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
思路:学会分解出每一位数。
'''
x = int(raw_input("input a number:"))
a = x / 10000
b = x % 10000 / 1000
c = x % 1000 / 100
d = x % 100 / 10
e = x % 10

if a != 0:
    print "there are 5 ",e,d,c,b,a
elif b != 0:
    print "there are 4 ",d,c,b,a
elif c != 0:
    print "there are 3 ",e,d,c
elif d != 0:
    print "there are 2 ",e,d
else:
    print "there are 1",e
View Code

 输出结果:

input a number:56819
there are 5  9 1 8 6 5
View Code

 实例30:

 题目:一个五位数,判断他是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
'''
# x = int(raw_input('input a number:'))
#
 x = str(x)
#
 for i in range(len(x)/2):
#
     if x[i] != x[-i - 1]:
#
         print '这不是一个回数'
#
         break
#
 print '这是一个回数'
x = int(raw_input("input a number:\n"))
x = str(x)
for i in range(len(x)/2):
    if x[i] != x[-i - 1]:
        print '这不是一个回文数'
        break
    print '这是一个回文数'
View Code

 输出结果:

input a number:
12321
这是一个回文数
View Code

 实例31:

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
思路:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。。
'''
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')
View Code

 输出结果:

please input:S
please input second letter:
please input:a
Saturday
View Code

 实例32:

 题目:按相反的顺序输出列表的值。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:按相反的顺序输出列表的值。
'''
a = ['one''two''three']
for i in a[::-1]:
    print i
View Code

 输出结果:

three
two
one
View Code

 实例33:

题目:按逗号分隔列表。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:按逗号分隔列表。
'''
L = [1,2,3,4,5]
s1 = ','.join(str(n) for n in L)
print s1
View Code

 输出结果:

1,2,3,4,5
View Code

 实例34:

题目:练习函数调用。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:练习函数调用。
'''
def hello_world():
    print 'hello world'

def three_hellos():
    for i in range(3):
        hello_world()
if __name__ == '__main__':
    three_hellos()
View Code

 输出结果:

hello world
hello world
hello world
View Code

 实例35:

题目:文本颜色设置。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:文本颜色设置。
'''
class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
print bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC
View Code

 输出结果:

警告的颜色字体?
View Code

 实例36:

 题目:求100之内的素数。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:求100之内的素数。
'''
from math import sqrt
if __name__ == '__main__':
    N = 100
    a = range(0,N)
    for i in range(2,int(sqrt(N))):
        for j in range(i + 1,N):
            if (a[i] != 0) and (a[j] != 0):
                if a[j] % a[i] == 0:
                    a[j] = 0
    print
    for i in range(2,N):
        if a[i] != 0:
            print "%5d" % a[i]
            if (i - 2) % 10 == 0:
                print
View Code

 输出结果:

    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
View Code

 实例37:

题目:对100个数进行排序。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:对10个数进行排序。
思路:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
'''
if __name__ == "__main__":
    N = 10
    # input data
    print 'please input ten num:'
    l = []
    for i in range(N):
        l.append(int(raw_input('input a number:')))
    print
    for i in range(N):
        print l[i]
    print

    # sort ten num
    for i in range(N - 1):
        min = i
        for j in range(i + 1,N):
            if l[min] > l[j]:min = j
        l[i],l[min] = l[min],l[i]
    print 'after sorted'
    for i in range(N):
        print l[i]
View Code

输出结果:

please input ten num:
input a number:5
input a number:8
input a number:46
input a number:256
input a number:1
input a number:8
input a number:9
input a number:4
input a number:569
input a number:79

5
8
46
256
1
8
9
4
569
79

after sorted
1
4
5
8
8
9
46
79
256
569
View Code

 实例38:

 题目:求一个3*3的矩阵对角线元素之和。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:求一个3*3矩阵对角线元素之和。
思路:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
'''
if __name__ == '__main__':
    a = []
    sum = 0.0
    for i in range(3):
        a.append([])
        for j in range(3):
            a[i].append(float(raw_input("input num:\n")))
    for i in range(3):
        sum += a[i][i]
    print sum
View Code

 输出结果:

input num:
79
input num:
46
input num:
86
input num:
21
input num:
56
input num:
32
input num:
89
input num:
45
input num:
89
224.0
View Code

 实例39:

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
思路:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
'''
if __name__ == '__main__':
    # 方法一
    a = [1,4,6,9,13,16,19,28,40,100,0]
    print 'original list is:'
    for i in range(len(a)):
        print a[i]
    number = int(raw_input("insert a new number:\n"))
    end = a[9]
    if number > end:
        a[10] = number
    else:
        for i in range(10):
            if a[i] > number:
                temp1 = a[i]
                a[i] = number
                for j in range(i + 1,11):
                    temp2 = a[j]
                    a[j] = temp1
                    temp1 = temp2
                break
    for i in range(11):
        print a[i]
View Code

输出结果:

1
4
6
9
13
16
19
28
40
100
0
View Code

 实例40:

题目:将一个数组逆序输出。 

if __name__ == '__main__':
    a = [9,6,5,4,1]
    N = len(a)
    print a
    for i in range(len(a) / 2):
        a[i],a[N - i - 1] = a[N - i - 1],a[i]
    print a
View Code

 输出结果:

[9, 6, 5, 4, 1]
[1, 4, 5, 6, 9]
View Code

 实例41:

 题目:模仿静态变量的用法。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:模仿静态变量的用法。
'''
def varfunc():
    var = 0
    print 'var = %d' % var
    var += 1
if __name__ == '__main__':
    for i in range(3):
        varfunc()

# 类的属性
#
 作为类的一个属性吧
class Static:
    StaticVar = 5
    def varfunc(self):
        self.StaticVar += 1
        print self.StaticVar

print Static.StaticVar
a = Static()
for i in range(3):
    a.varfunc()
View Code

 输出结果:

var = 0
var = 0
var = 0
5
6
7
8
View Code

 实例42:

题目:学习使用auto定义变量的用法。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:学习使用auto定义变量的用法。
思路:没有auto关键字,使用变量作用域来举例吧。
'''
num = 2
def autofunc():
    num = 1
    print 'internal block num = %d' % num
    num += 1
for i in range(3):
    print 'The num = %d' % num
    num += 1
    autofunc()
View Code

 输出结果:

The num = 2
internal block num = 1
The num = 3
internal block num = 1
The num = 4
internal block num = 1
View Code

 实例43:

题目:模仿静态变量(static)另一案例。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:模仿静态变量(static)另一案例。
思路:演示一个python作用域使用方法
'''
class Num:
    nNum = 1
    def inc(self):
        self.nNum += 1
        print 'nNum = %d' % self.nNum

if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print 'The num = %d' % nNum
        inst.inc()
View Code

 输出结果:

The num = 3
nNum = 2
The num = 4
nNum = 3
The num = 5
nNum = 4
View Code

 实例44:

题目:统计1到100之和。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:统计 1 到 100 之和。
'''
tmp = 0
for i in range(1,101):
    tmp += i
print 'The sum is %d' % tmp
View Code

 输出结果:

The sum is 5050
View Code

 实例45:

题目:求输入数字的平方,如果平方运算后小于50则退出。 

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:求输入数字的平方,如果平方运算后小于 50 则退出。
'''
TRUE = 1
FALSE = 0
def SQ(x):
    return x * x
print '如果输入的数字小于 50,程序将停止运行。'
again = 1
while again:
    num = int(raw_input('Please input number'))
    print '运算结果为 %d' % (SQ(num))
    if num >= 50:
        again = TRUE
    else:
        again = FALSE
View Code

 输出结果:

如果输入的数字小于 50,程序将停止运行。
Please input number300
运算结果为 90000
Please input number45
运算结果为 2025
View Code

 实例46:

 题目:连个变量值互换。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:连个变量值互换。
'''
def exchange(a,b):
    a,b = b,a
    return (a,b)

if __name__ == '__main__':
    x = 10
    y = 20
    print 'x = %d,y = %d' % (x,y)
    x,y = exchange(x,y)
    print 'x = %d,y = %d' % (x,y)
View Code

 输出结果:

x = 10,y = 20
x = 20,y = 10
View Code

 实例47:

 题目:数字比较。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:数字比较。
'''
if __name__ == '__main__':
    i = 10
    j = 20
    if i > j:
        print '%d 大于 %d' % (i,j)
    elif i == j:
        print '%d 等于 %d' % (i,j)
    elif i < j:
        print '%d 小于 %d' % (i,j)
    else:
        print '未知'
View Code

 输出结果:

10 小于 20
View Code

 实例48:

 题目:使用lambda来创建匿名函数。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:使用lambda来创建匿名函数。
'''
MAXIMUM = lambda x,y :  (x > y) * x + (x < y) * y
MINIMUM = lambda x,y :  (x > y) * y + (x < y) * x

if __name__ == '__main__':
    a = 10
    b = 20
    print 'The largar one is %d' % MAXIMUM(a,b)
    print 'The lower one is %d' % MINIMUM(a,b)
View Code

 输出结果:

The largar one is 20
The lower one is 10
View Code

 实例49:

题目:输出一个随机数。

#!/usr/bin/env  python
#
 --*--coding:utf-8 --*--
'''
需求:输出一个随机数。
思路:使用 random 模块。
'''
import random

#生成 10 到 20 之间的随机数
print random.uniform(10, 20)
View Code

 输出结果:

14.6599912675
View Code


posted @ 2016-01-10 23:44  吴老二  阅读(13014)  评论(3编辑  收藏  举报