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、兔子问题

# 第一个月   a
# 第二个月   b
# 第三个月+第四个月=第五个月 a=a+b
# 第四个月+第五个月=第六个月 b=a+b  //b=a+b+b
a=1
b=1
print('第1个月',a)#第一个月
print('第2个月',b)#第二个月
for i in range(3,20):#从第三个月到第n个月
    if i%2!=0:
        a=a+b
        print('第%s个月'%i,a)
    else:
        b=a+b
        print('第%s个月' %i,b)


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()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值