python练习题(二)
11、题目:判断101-200之间有多少个素数,并输出所有素数。
#质数只能被1和自己本身整除,也称为素数
for i in range(101,201):
for k in range(2,i):
if i%k==0:
break
else:
print(i,'是质数')
12、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
注意:python3中/结果为小数,所以最好用//
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)
13、将一个正整数分解质因数。例如:输入90,打印出90=233*5。
import math
num = int(input('输入一个整数:'))
arr = []
while num>1:
for i in range(2,int(math.sqrt(num))+1): # 因为题目是一个没写范围正整数,开方可以有效减少该值过大时候的计算量
if num%i==0:
arr.append(i)
num = num//i
break
else:
arr.append(num)
break
print(arr)
14、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
score=int(input('请输入分数'))
if score>=90:
s='A'
elif score>=60 and score<=89:
s = 'B'
elif score<60:
s = 'C'
print('你的分数%d,等级为:%s'%(score,s)
15、输出指定格式的日期
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'))
# 日期算术运算
miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
# 日期替换
miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
16、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
count=0
count1=0
count2=0
count3=0
s=input('请输入字符:')
for i in s:
if i.isdigit():
count=count+1
elif i.isalpha():
count1=count1+1
elif i.isspace():
count2=count+1
else:
count3=count3+1
print('字母%s个,数字%s个,空格%s个,其他%s个'%(count1,count,count2,count3))
17、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
#例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
a=input('被加数字:')
n=int(input('加几次?:'))
result=0
for i in range(n):
result+=int(a)
a+=a[0]
print('第%s个数%s'%(i+1,a))
print(result)
18、兔子问题
m1=1 # 满1月
m2=0 # 满俩月(下个月生兔子)
mm=0 # 可以月月生兔子了
for i in range(1,10):
# 过了1个月后
mm = mm+m2 # 加入新增成年的兔子
m2 = m1 # 满月的变成满俩月
m1 = mm # 这个月新出生兔子
print(i,mm+m1+m2) # 每个月有多少对兔子
19、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
for num in range(1,1000):
l=[]
for i in range(1,num):
if num%i==0:
l.append(i)
if sum(l)==num:
print(num,l)
20、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
l=[100]
h=100
print('第一次从100米落下,经过%s米,落地反弹%s米'%(h,h/2))
for i in range(2,11):
l.append(100)
h=h/2
print('第%s次从%s米落下,经过%s米,落地反弹%s米' % (i,h,sum(l),h/2))
21、猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
num=1
for i in range(10-1):
num=(num+1)*2
print(num)
22、题目022:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
for a in ['x','y','z']:
for b in ['x','y','z']:
for c in ['x','y','z']:
if a!=b and b!=c and a!=c:
if a!='x' and c!='x' and c!='z':
print('a'+a ,'b'+b ,'c'+c)
23、题目023:
打印出如下图案(菱形):
*
s = '*'
for i in range(1, 8, 2):
print((s*i).center(7))
for i in reversed(range(1, 6, 2)):
print((s*i).center(7))
24、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
a=2.0
b=1.0
sum=0
for i in range(1,21):
sum=sum+a/b#求和
t=a#储存a的值
a=a+b #每一个分子等于前一项分母和分子之和
b=t#把之前储存的a的值重新赋值给b,因为每一项的分母等于前一项的分子
print(sum)
25、求1+2!+3!+…+20!的和
sum=0#定义求和
res=1#定义初始化变量
for i in range(1,21):
for n in range(1,i+1):
res=res*n
sum=sum+res
res=1#需要每次初始化为1
print(sum)
26、利用递归方法求5!。
def fun(x):
if x>1:
return x*fun(x-1)
else:
return x
print(fun(5))
27、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
def output(s,l):
if l==0:
return
print (s[l-1])
output(s,l-1)
28、5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
age=8
for i in range(1,6):
age+=2
print('第%s名年龄为%s'%(i,age))
def age(n):
if n == 1: c = 10
else: c = age(n - 1) + 2
return c
print age(5)
29、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
x = int(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)
num = 12345
s = str(num)
print(len(s))
print(s[::-1])
30、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
s=str(input('请输入一个5位整数\n'))
for i in range(len(s)):
if s[0]==s[-1] and s[1]==s[-2] and len(s)==5:
print(s,'是回文数')
break
else:
print(s,'不是回文数')
break
31、 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
week = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']
num=input('请输入星期的第一个字母\n').upper()
if num.isdigit():
print('不能输入数字')
else:
if num=='M':
print('星期一',week[0])
elif num=='T':
num=input('请再次输入第二个字母\n').upper()
if num=='U':
print('星期二', week[1])
elif num=='H':
print('星期四', week[3])
else:
print('输入不正确')
elif num=='W':
print('星期三', week[2])
elif num=='F':
print('星期五', week[4])
elif num=='S':
num=input('请输入第二个字母\n').upper()
if num=='A':
print('星期六',week[5])
elif num=='U':
print('星期日',week[6])
else:
print('输入不正确')
32、按相反的顺序输出列表的值。
l=['5','6','8']
l.reverse()
print(l)
l=['5','6','8']
for i in l[::-1]:
print(i)
33、按逗号分隔列表。
l=['1','2','3','4','5','6']
print(','.join(l))
34、练习函数调用
def fun():
print('2018即将过完')
def hah():
print('任何人都应该被关爱')
if __name__=='__main__':
fun()
hah()
35、文本颜色设置
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)
36、100之间的素数
l=[2]
for i in range(3,100):
for n in range(2,i):
if i%n==0:
break
else:
l.append(i)
print(l)
37、对10个数进行排序
print('-----请输入10个数字-----')
n=1
l=[]
while n<11:
num=input('请输入第%d个数\n'%n)
l.append(num)
n+=1
print(sorted(l))
38、求一个3*3矩阵主对角线元素之和
str = input('请输入9个数字,用空格隔开,以形成3*3矩阵:\n')
n = [int(i) for i in str.split(' ')] #获取9个数字
mx = [] #存储矩阵
for i in range(3):
mt = [] #收集矩阵中每行的数字列表
for j in range(3):
mt.append(n[i*3 + j])
mx.append(mt) #每行数字存储进mx列表
print(mt)
print(mx)
sum1 = 0
sum2 = 0
for i in range(3):
sum1 += mx[i][i]
sum2 += mx[2-i][i]
print('\方向对角线3元素之和为:%s' % sum1)
print('/方向对角线3元素之和为:%s' % sum2)
l=[[5,2,3],[4,5,6],[7,8,10]]
for k in l:
print(k)
sum=0
sum1=0
for i in range(len(l)):
sum+=l[i][i]
sum1+=l[i][2-i]
print('\\方向对角线元素之和',sum)
print('/方向对角线元素之和',sum1)
39、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
import random
l=[1,2,3,4,5,6]
index=random.randint(1,len(l))
s=int(input('请输入一个数字'))
l.insert(index,s)
print(sorted(l))
40、将一个数组逆序输出
l=[5,8,3,6,4,7,9,1]
l.reverse()
print(l)
41、模仿静态变量的用法
如果是函数中的局部变量,每次调用函数都会初始化。而类中的变量,创建类的时候初始化,每次执行类中的函数的时候,不会初始化类变量。看起来是想说这么个意思
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()
42、学习使用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()
43、模仿静态变量(static)另一案例
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()