思路是:最坏的结果是 n 的平方与 (n+1) 的平方刚好差 168,由于是平方的关系,不可能存在比这更大的间隙。至于判断是否是完全平方数,最简单的方法是:平方根的值小数为 0 即可。结合起来:
n=0while (n+1)**2-n*n<=168:
n+=1for i inrange((n+1)**2):
if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):
print(i-100)
实例 004:这天第几天
题目:输入某年某月某日,判断这一天是这一年的第几天?
说明:特殊情况,闰年时需考虑二月多加一天。
defisLeapYear(y):
return (y%400==0or (y%4==0and y%100!=0))
DofM=[0,31,28,31,30,31,30,31,31,30,31,30]
res=0
year=int(input('Year:'))
month=int(input('Month:'))
day=int(input('day:'))
if isLeapYear(year):
DofM[2]+=1for i inrange(month):
res+=DofM[i]
print(res+day)
实例 005:三数排序
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
说明:练练手就随便找个排序算法实现一下,偷懒就直接调函数。
raw=[]
for i inrange(3):
x=int(input('int%d: '%(i)))
raw.append(x)
for i inrange(len(raw)):
for j inrange(i,len(raw)):
if raw[i]>raw[j]:
raw[i],raw[j]=raw[j],raw[i]
print(raw)
raw2=[]
for i inrange(3):
x=int(input('int%d: '%(i)))
raw2.append(x)
print(sorted(raw2))
import math
for i inrange(100,200):
flag=0for j inrange(2,round(math.sqrt(i))+1):
if i%j==0:
flag=1breakif flag:
continueprint(i)
print('\nSimplify the code with "else"\n')
for i inrange(100,200):
for j inrange(2,round(math.sqrt(i))+1):
if i%j==0:
breakelse:
print(i)
for i inrange(100,1000):
s=str(i)
one=int(s[-1])
ten=int(s[-2])
hun=int(s[-3])
if i == one**3+ten**3+hun**3:
print(i)
实例 014:分解质因数
题目:将一个整数分解质因数。例如:输入 90,打印出 90=233*5。
说明:根本不需要判断是否是质数,从 2 开始向数本身遍历,能整除的肯定是最小的质数。
target=int(input('输入一个整数:'))
print(target,'= ',end='')
if target<0:
target=abs(target)
print('-1*',end='')
flag=0if target<=1:
print(target)
flag=1whileTrue:
if flag:
breakfor i inrange(2,int(target+1)):
if target%i==0:
print("%d"%i,end='')
if target==i:
flag=1breakprint('*',end='')
target/=i
break
实例 015:分数归档
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。
说明:用条件判断即可。
points=int(input('输入分数:'))
if points>=90:
grade='A'elif points<60:
grade='C'else:
grade='B'print(grade)
deffactor(num):
target=int(num)
res=set()
for i inrange(1,num):
if num%i==0:
res.add(i)
res.add(num/i)
return res
for i inrange(2,1001):
if i==sum(factor(i))-i:
print(i)
a=set(['x','y','z'])
b=set(['x','y','z'])
c=set(['x','y','z'])
c-=set(('x','z'))
a-=set('x')
for i in a:
for j in b:
for k in c:
iflen(set((i,j,k)))==3:
print('a:%s,b:%s,c:%s'%(i,j,k))
实例 023:画菱形
题目:打印出如下图案(菱形):
说明:递归调用即可。
defdraw(num):
a="*"*(2*(4-num)+1)
print(a.center(9,' '))
if num!=1:
draw(num-1)
print(a.center(9,' '))
draw(4)
lo=int(input('下限:'))
hi=int(input('上限:'))
for i inrange(lo,hi+1):
if i > 1:
for j inrange(2,i):
if (i % j) == 0:
breakelse:
print(i)
实例 037:排序
题目:对 10 个数进行排序。
说明:同实例 005。
raw=[]
for i inrange(10):
x=int(input('int%d: '%(i)))
raw.append(x)
for i inrange(len(raw)):
for j inrange(i,len(raw)):
if raw[i]>raw[j]:
raw[i],raw[j]=raw[j],raw[i]
print(raw)
实例 038:矩阵对角线之和
题目:求一个 3*3 矩阵主对角线元素之和。
说明:无特殊分析。
mat=[[1,2,3],
[3,4,5],
[4,5,6]
]
res=0for i inrange(len(mat)):
res+=mat[i][i]
print(res)
lis=[1,10,100,1000,10000,100000]
n=int(input('insert a number: '))
lis.append(n)
for i inrange(len(lis)-1):
if lis[i]>=n:
for j inrange(i,len(lis)):
lis[j],lis[-1]=lis[-1],lis[j]
breakprint(lis)
实例 040:逆序列表
题目:将一个数组逆序输出。
说明:依次交换位置,或者直接调用 reverse 方法。
lis=[1,10,100,1000,10000,100000]
for i inrange(int(len(lis)/2)):
lis[i],lis[len(lis)-1-i]=lis[len(lis)-1-i],lis[i]
print('第一种实现:')
print(lis)
lis=[1,10,100,1000,10000,100000]
print('第二种实现:')
lis.reverse()
print(lis)
实例 041:类的方法与变量
题目:模仿静态变量的用法。
说明:构造类,了解类的方法与变量。
defdummy():
i=0print(i)
i+=1classcls:
i=0defdummy(self):
print(self.i)
self.i+=1
a=cls()
for i inrange(50):
dummy()
a.dummy()
实例 042:变量作用域
题目:学习使用 auto 定义变量的用法。
说明:python 中的变量作用域。
i=0
n=0defdummy():
i=0print(i)
i+=1defdummy2():
global n
print(n)
n+=1print('函数内部的同名变量')
for j inrange(20):
print(i)
dummy()
i+=1print('global 声明同名变量')
for k inrange(20):
print(n)
dummy2()
n+=10
说明:创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
Y = [[5,8,1],
[6,7,3],
[4,5,9]]
res=[[0,0,0],
[0,0,0],
[0,0,0]]
for i inrange(len(res)):
for j inrange(len(res[0])):
res[i][j]=X[i][j]+Y[i][j]
print(res)
if __name__ == '__main__':
from tkinter import *
canvas = Canvas(width = 300,height = 300,bg = 'green')
canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
import math
B = 0.809for i inrange(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k inrange(501):
for i inrange(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
for j inrange(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
实例 060:字符串长度
题目:计算字符串长度。
说明:无特殊分析。
s='zhangguang101'print(len(s))
实例 061:杨辉三角
题目:打印出杨辉三角形前十行。
说明:无特殊分析。
defgenerate(numRows):
r = [[1]]
for i inrange(1,numRows):
r.append(list(map(lambda x,y:x+y, [0]+r[-1],r[-1]+[0])))
return r[:numRows]
a=generate(10)
for i in a:
print(i)
raw=[]
for i inrange(3):
x=int(input('int%d: '%(i)))
raw.append(x)
for i inrange(len(raw)):
for j inrange(i,len(raw)):
if raw[i]>raw[j]:
raw[i],raw[j]=raw[j],raw[i]
print(raw)
raw2=[]
for i inrange(3):
x=int(input('int%d: '%(i)))
raw2.append(x)
print(sorted(raw2))
from collections import *
li=[1,2,3,4,5,6,7,8,9]
deque=deque(li,maxlen=len(li))
print(li)
deque.rotate(int(input('rotate:')))
print(list(deq))
实例 069:报数
题目:有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。
说明:无特殊分析。
if __name__ == '__main__':
nmax = 50
n = int(input('请输入总人数:'))
num = []
for i inrange(n):
num.append(i + 1)
i = 0
k = 0
m = 0while m < n - 1:
if num[i] != 0 : k += 1if k == 3:
num[i] = 0
k = 0
m += 1
i += 1if i == n : i = 0
i = 0while num[i] == 0: i += 1print(num[i])
N = 3#stu# num : string# name : string# score[4]: list
student = []
for i inrange(5):
student.append(['','',[]])
definput_stu(stu):
for i inrange(N):
stu[i][0] = input('input student num:\n')
stu[i][1] = input('input student name:\n')
for j inrange(3):
stu[i][2].append(int(input('score:\n')))
defoutput_stu(stu):
for i inrange(N):
print ('%-6s%-10s' % ( stu[i][0],stu[i][1] ))
for j inrange(3):
print ('%-8d' % stu[i][2][j])
if __name__ == '__main__':
input_stu(student)
print (student)
output_stu(student)
实例 072:创建链表
题目:创建一个链表。
说明:原文不太靠谱,已修正逻辑。
classNode:
def__init__(self, data):
self.data = data
self.next = Nonedefget_data(self):
returnself.data
classList:
def__init__(self, head):
self.head = head
defis_empty(self):
returnself.get_len() == 0defget_len(self):
length = 0
temp = self.head
while temp isnotNone:
length += 1
temp = temp.nextreturn length
defappend(self, node):
temp = self.head
while temp.nextisnotNone:
temp = temp.next
temp.next = node
defdelete(self, index):
if index < 1or index > self.get_len():
print("给定位置不合理")
returnif index == 1:
self.head = self.head.nextreturn
temp = self.head
cur_pos = 0while temp isnotNone:
cur_pos += 1if cur_pos == index-1:
temp.next = temp.next.next
temp = temp.nextdefinsert(self, pos, node):
if pos < 1or pos > self.get_len():
print("插入结点位置不合理")
return
temp = self.head
cur_pos = 0while temp isnotNone:
cur_pos += 1if cur_pos == pos-1:
node.next = temp.next
temp.next =node
break
temp = temp.nextdefreverse(self, head):
if head isNoneand head.nextisNone:
return head
pre = head
cur = head.nextwhile cur isnotNone:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
head.next = Nonereturn pre
defprint_list(self, head):
init_data = []
while head isnotNone:
init_data.append(head.get_data())
head = head.nextreturn init_data
if __name__=='__main__':
head=Node('head')
link=List(head)
for i inrange(10):
node=Node(i)
link.append(node)
print(link.print_list(head))
实例 073:反向输出链表
题目:反向输出一个链表。
说明:无特殊分析。
classNode:
def__init__(self, data):
self.data = data
self.next = Nonedefget_data(self):
returnself.data
classList:
def__init__(self, head):
self.head = head
defis_empty(self):
returnself.get_len() == 0defget_len(self):
length = 0
temp = self.head
while temp isnotNone:
length += 1
temp = temp.nextreturn length
defappend(self, node):
temp = self.head
while temp.nextisnotNone:
temp = temp.next
temp.next = node
defdelete(self, index):
if index < 1or index > self.get_len():
print("给定位置不合理")
returnif index == 1:
self.head = self.head.nextreturn
temp = self.head
cur_pos = 0while temp isnotNone:
cur_pos += 1if cur_pos == index-1:
temp.next = temp.next.next
temp = temp.nextdefinsert(self, pos, node):
if pos < 1or pos > self.get_len():
print("插入结点位置不合理")
return
temp = self.head
cur_pos = 0while temp isnotNone:
cur_pos += 1if cur_pos == pos-1:
node.next = temp.next
temp.next =node
break
temp = temp.nextdefreverse(self, head):
if head isNoneand head.nextisNone:
return head
pre = head
cur = head.nextwhile cur isnotNone:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
head.next = Nonereturn pre
defprint_list(self, head):
init_data = []
while head isnotNone:
init_data.append(head.get_data())
head = head.nextreturn init_data
if __name__=='__main__':
head=Node('head')
link=List(head)
for i inrange(10):
node=Node(i)
link.append(node)
print(link.print_list(head))
print(link.print_list(link.reverse(head)))
实例 074:列表排序、连接
题目:列表排序及连接。
说明:排序可使用 sort() 方法,连接可以使用 + 号或 extend() 方法。
a=[2,6,8]
b=[7,0,4]
a.extend(b)
a.sort()
print(a)
实例 075:放松一下
题目:放松一下,算一道简单的题目。
说明:无特殊分析。
if __name__ == '__main__':
for i inrange(5):
n = 0if i != 1: n += 1if i == 3: n += 1if i == 4: n += 1if i != 4: n += 1if n == 3: print (64 + i)
实例 076:做函数
题目:编写一个函数,输入 n 为偶数时,调用函数求 1/2+1/4+…+1/n,当输入 n 为奇数时,调用函数 1/1+1/3+…+1/n
说明:无特殊分析。
defpeven(n):
i = 0
s = 0.0for i inrange(2,n + 1,2):
s += 1.0 / i
return s
defpodd(n):
s = 0.0for i inrange(1, n + 1,2):
s += 1.0 / i
return s
defdcall(fp,n):
s = fp(n)
return s
if __name__ == '__main__':
n = int(input('input a number: '))
if n % 2 == 0:
sum = dcall(peven,n)
else:
sum = dcall(podd,n)
print (sum)
实例 077:遍历列表
题目:循环输出列表
说明:无特殊分析。
l=['moyu','niupi','xuecaibichi','shengfaji','42']
for i inrange(len(l)):
print(l[i])
实例 078:字典
题目:找到年龄最大的人,并输出。请找出程序中有什么问题。
说明:无特殊分析。
if __name__ == '__main__':
person = {"li":18,"wang":50,"zhang":20,"sun":22}
m = 'li'for key in person.keys():
if person[m] < person[key]:
m = key
print ('%s,%d' % (m,person[m]))
if __name__ == '__main__':
i = 0
j = 1
x = 0while (i < 5) :
x = 4 * j
for i inrange(0,5) :
if(x%4 != 0) :
breakelse :
i += 1
x = (x/4) * 5 +1
j += 1print(x)
for p inrange(5):
x=(x-1)/5*4print(x)
a = 809for i inrange(10,100):
b = i * a
if b >= 1000and b <= 10000and8 * i < 100and9 * i >= 100:
print(b,' = 800 * ', i, ' + 9 * ', i)
for i inrange(10,100):
if8*i>99or9*i<100:
continueif809*i==800*i+9*i:
print(i)
break
n=input()
n = str(n)
a=[]
for i inrange(4):
a.append((int(n[i])+5)%10)
a[0],a[3]=a[3],a[0]
a[1],a[2]=a[2],a[1]
print ("".join('%s' %s for s in a))
实例 090:列表详解
题目:列表使用实例。
说明:无特殊分析。
#list #新建列表
testList=[10086,'中国移动',[1,2,4,5]]
#访问列表长度 print (len(testList) )
#到列表结尾 print (testList[1:])
#向列表添加元素
testList.append('i\'m new here!')
print (len(testList) )
print (testList[-1] )
#弹出列表的最后一个元素 print (testList.pop(1) )
print (len(testList) )
print (testList )
#list comprehension #后面有介绍,暂时掠过
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print (matrix )
print (matrix[1] )
col2 = [row[1] for row in matrix]#get a column from a matrix print (col2 )
col2even = [row[1] for row in matrix if row[1] % 2 == 0]#filter odd item print (col2even)
实例 091:time 模块
题目:时间函数举例 1。
说明:无特殊分析。
if __name__ == '__main__':
import time
print (time.ctime(time.time()))
print (time.asctime(time.localtime(time.time())))
print (time.asctime(time.gmtime(time.time())))
实例 092:time 模块 II
题目:时间函数举例 2。
说明:如何浪费时间。
if __name__ == '__main__':
import time
start = time.time()
for i inrange(3000):
print(i)
end = time.time()
print (end - start)
实例 093:time 模块 III
题目:时间函数举例 3。
说明:如何浪费时间。
if __name__ == '__main__':
import time
start = time.clock()
for i inrange(100):
print(i)
end = time.clock()
print('different is %6.3f' % (end - start))
实例 094:time 模块 IV
题目:时间函数举例 4。
说明:如何浪费时间。
if __name__ == '__main__':
import time
import random
play_it = input('do you want to play it.(\'y\' or \'n\')')
while play_it == 'y':
c = input('input a character:\n')
i = random.randint(0,2**32) % 100print ('please input number you guess:\n')
start = time.clock()
a = time.time()
guess = int(input('input your guess:\n'))
while guess != i:
if guess > i:
print('please input a little smaller')
guess = int(input('input your guess:\n'))
else:
print('please input a little bigger')
guess = int(input('input your guess:\n'))
end = time.clock()
b = time.time()
var = (end - start) / 18.2print (var)
# print 'It took 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 ('The number you guess is %d' % i)
play_it = input('do you want to play it.')