python]斐波那契数列 :
>>> def fib(n):
"""返回小于指定值的斐波那契数列"""
result=[]
a,b=0,1
while b
a,b=b,a+b
return result
>>> fib(6)
[1, 1, 2, 3, 5]
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
2.程序源代码:
import math
for i in range(10000):
#转化为整型值
x= int(math.sqrt(i + 100))
y= int(math.sqrt(i + 268))
if(x * x == i + 100) and (y * y == i + 268):
print i
'''题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
'''
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)#tuple
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
Python语言内置了sort方法,可以很方便地对某个List进行排序:
L = [6, 5, 1, 3, 4, 2]
L.sort()
print L
---------- Run Python Program ----------
[1, 2, 3, 4, 5, 6]
【程序6】
题目:用*号输出字母p的图案。
1.程序分析:可先用'*'号在纸上写出字母p,再分行输出。
2.程序源代码:
'''
print 'Hello Python world!\n'
print '*' * 10
for i in range(5):
print '* *'
print '*' * 10
print '*\n' * 6
题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{ for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
'''
for i in range(1,10):
for j in range(1,10):
result = i * j
print '%d * %d = % -3d' % (i,j,result)
print ''
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
'''
h = 0
leap = 1
from math importsqrt
from sys importstdout
for m inrange(101,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 totalis %d' % h
简单的:
from math importsqrt
for m inrange(101,201):
k=int(math.sqrt(m+1))
for j in range(2,k+1):
if m%j==0:
break
else:
print m
程序13】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
'''
for n inrange(100,1001):
i = n / 100
j = n / 10 % 10
k = n % 10
if i * 100 + j * 10 + k == i**3 + j ** 3 +k ** 3:
print "%-5d" % n
''
【程序14】
题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
2.程序源代码:
'''
from sys importstdout
n = int(raw_input("inputnumber:\n"))
stdout.write("n = " )
for i inrange(2,n + 1):
while n != i:
if n % i == 0:
stdout.write(str(i))
stdout.write("*")
n = n / i
else:
break
print"%d" % n #除后剩余的数
'''
【程序17】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
2.程序源代码:
'''
import string
s =raw_input('input a string:\n')
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)
'''
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
2.程序源代码:
'''
Tn = 0
Sn = []
n =int(raw_input('n = :\n'))
a =int(raw_input('a = :\n'))
for count inrange(n):
Tn = Tn + a #算法核心
a = a * 10
Sn.append(Tn)
print Tn
Sn =reduce(lambda x,y : x + y,Sn)#求和
print Sn
'''
【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
2.程序源代码:
'''
x2 = 1
for day inrange(9,0,-1):
x1 = x2*2+1
x2 = x1
print x1
Python提供了ord和chr两个内置的函数,用于字符与ASCII码之间的转换。
>>>print ord('a')
97
>>>print chr(97)
a
'''
【程序23】
题目:打印出如下图案(菱形)
*
***
*****
*******
*****
***
*
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
for循环,第一层控制行,第二层控制列。
2.程序源代码:
'''
from sys importstdout
for i inrange(4):
for j in range(2 - i + 1):
stdout.write(' ')
for k in range(2 * i + 1):
stdout.write('*')
for i inrange(3):
for j in range(i + 1):
stdout.write(' ')
for k in range(4 - 2 * i + 1):
stdout.write('*')
'''
【程序24】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
2.程序源代码:
'''
#方法一
a = 2.0
b = 1.0
s = 0
for n inrange(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 inrange(1,21):
s += a / b
b,a = a , a + b
print s
#方法三
a = 2.0
b = 1.0
l = []
for n inrange(1,21):
l.append(a / b)
b,a = a,a + b
printreduce(lambda x,y: x + y,l)
'''
【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。
2.程序源代码:
'''
#方法一
n = 0
s = 0
t = 1
for n inrange(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
'''
【程序26】
题目:利用递归方法求5!。
1.程序分析:递归公式:fn=fn_1*4!
2.程序源代码:
'''
def fact(j):
sum = 0
if j == 0:
sum = 1
else:
sum = j * fact(j - 1)
return sum
for i inrange(5):
print '%d! = %d' % (i,fact(i))
def palin(n):
next = 0
if n <= 1:
next = input()
print next
else:
next = input()
palin(n - 1)
print next
i = 5
palin(i)
'''
【程序29】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
2.程序源代码:
'''
x =int(raw_input("input a number:\n"))
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
可以由此推出:求一个数的每位的方法
'''
【程序40】
题目:将一个数组逆序输出。
1.程序分析:用第一个与最后一个交换。
2.程序源代码:
'''
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] #或者a[i],a[- i - 1] =a[- i - 1],a[i]
print a
求二个数的大小:
MAXIMUM = lambdax,y : (x > y) * x + (x < y) * y
MINIMUM = lambdax,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)
Python中Tkinter的Canvas组件实例
# -*- coding:utf-8 -*-
# file: TkinterCanvas.py
#
import Tkinter # 导入Tkinter模块
root = Tkinter.Tk()
canvas = Tkinter.Canvas(root,
width = 600, # 指定Canvas组件的宽度
height = 480, # 指定Canvas组件的高度
bg = 'white') # 指定Canvas组件的背景色
im = Tkinter.PhotoImage(file='python.gif') # 使用PhotoImage打开图片
canvas.create_image(300,50,image = im) # 使用create_image将图片添加到Canvas组件中
canvas.create_text(302,77, # 使用create_text方法在坐标(302,77)处绘制文字
text = 'Use Canvas' # 所绘制文字的内容
,fill = 'gray') # 所绘制文字的颜色为灰色
canvas.create_text(300,75,
text = 'Use Canvas',
fill = 'blue')
canvas.create_polygon(290,114,316,114,330,130, # 使用create_polygon方法绘制六边形
310,146,284,146,270,130)
canvas.create_oval(280,120,320,140, # 使用create_oval方法绘制椭圆
fill = 'white') # 设置椭圆用白色填充
canvas.create_line(250,130,350,130) # 使用create_line绘制一条从(250,130)到(350,130)的直线
canvas.create_line(300,100,300,160)
canvas.create_rectangle(90,190,510,410, # 使用create_rectangle绘制一个矩形
width=5) # 设置矩形线宽为5个像素
canvas.create_arc(100, 200, 500, 400, # 使用create_arc绘制圆弧
start=0, extent=240, # 设置圆弧的起止角度
fill="pink") # 设置圆弧填充颜色
canvas.create_arc(103,203,500,400,
start=241, extent=118,
fill="red")
canvas.pack() # 将Canvas添加到主窗口
root.mainloop()
【程序56】
题目:画图,学用circle画圆形。
1.程序分析:
2.程序源代码:
#include "graphics.h"
main()
{
intdriver,mode,i;
floatj=1,k=1;
driver=VGA;mode=VGAHI;
initgraph(&driver,&mode,"");
setbkcolor(YELLOW);
for(i=0;i<=25;i++)
{
setcolor(8);
circle(310,250,k);
k=k+j;
j=j+0.3;
}
}
'''
if __name__ == '__main__':
from Tkinter import *
canvas = Canvas(width=800, height=600, bg='yellow')
canvas.pack(expand=YES, fill=BOTH)
k =1
j =1
fori in range(0,26):
canvas.create_oval(310 - k,250 - k,310 + k,250 + k, width=1)
k += j
j += 0.3
mainloop()
'''
【程序】
题目:创建一个链表。
1.程序分析:
2.程序源代码:
'''
if__name__ == '__main__':
ptr = []
for i in range(5):
num = int(raw_input('please input anumber:\n'))
ptr.append(num)
print ptr #反向输出一个链表ptr.reverse()
#ptr.sort()列表排序
'''
【程序76】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数
1/1+1/3+...+1/n(利用指针函数)
1.程序分析:
2.程序源代码:
'''
def peven(n):
i = 0
s = 0.0
for i inrange(2,n + 1,2):
s += 1.0 /i
return s
def podd(n):
s = 0.0
for i inrange(1, n + 1,2):
s += 1 / i
return s
def dcall(fp,n):
s = fp(n)
return s
if __name__ == '__main__':
n = int(raw_input('inputa number:\n'))
if n % 2 == 0:
sum =dcall(peven,n)
else:
sum =dcall(podd,n)
print sum
题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
1.程序分析:
2.程序源代码:
'''
if __name__ == '__main__':
n = 1
while n <=7:
a =int(raw_input('input a number:\n'))
while a< 1 or a > 50:
a =int(raw_input('input a number:\n'))
print a *'*'
n += 1
if a==-1:
break
'''
【程序89】
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
1.程序分析:
2.程序源代码:
'''
from sys import stdout
if __name__ == '__main__':
a =int(raw_input('input a number:\n'))
aa = []
aa.append(a /1000)
aa.append(a %1000 / 100)
aa.append(a %100 / 10)
aa.append(a %10)
#print aa
for i inrange(4):
aa[i] += 5
aa[i] %= 10
for i inrange(2):
aa[i],aa[3- i] = aa[3 - i],aa[i]
#print aa
for i inrange(4):
stdout.write(aa[i])
'''
【程序94】
题目:时间函数举例4,一个猜数游戏,判断一个人反应快慢。
1.程序分析:
2.程序源代码:
'''
if __name__ == '__main__':
import time
import random
play_it =raw_input('do you want to play it.(\'y\' or \'n\')')
while play_it== 'y':
c =raw_input('input a character:\n')
i =random.randint(0,2**32) % 100
print'please input number you guess:\n'
start =time.clock()
a =time.time()
guess =int(raw_input('input your guess:\n'))
while guess!= i:
ifguess > i:
print 'please input a little smaller'
guess = int(raw_input('input your guess:\n'))
else:
print 'please input a little bigger'
guess = int(raw_input('input your guess:\n'))
end =time.clock()
b =time.time()
var = (end- start) / 18.2
print var
# print 'Ittook you %6.3 seconds' % time.difftime(b,a))
if var <15:
print'you are very clever!'
elif var< 25:
print 'you are normal!'
else:
print'you are stupid!'
print'Congradulations'
print 'Thenumber you guess is %d' % i
play_it =raw_input('do you want to play it.')