python练习100题(5)

  • 题目054:取一个整数a从右端开始的4-7位。
    切片是左闭右开的。
a=123456789
a=str(a)
print(a[-7:-3])# 写的时候注意一下python切片是[-7:-4)左闭右开的,不包含[-4]的,所以要写成-3才能取到

  • 题目061:打印出杨辉三角形(要求打印出10行如下图)。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

arr=[1]
print(1)
while len(arr)<10:
    a=[0]+arr
    b=arr+[0]
    arr=[a[i]+b[i] for i in range(len(a))]
    c=[str(i) for i in range(len(arr))]
    print(' '.join(c))
#''.join(string) 对象必须是string类型,进行字符连接
  • 题目066:输入3个数a,b,c,按大小顺序输出。
arr=[]
for i in range(3):
    a=input('please input5:')
    arr.append(a)
arr.sort(reverse=True)#reverse=True表示从大到小排序
print(arr)

  • 题目067:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
a=[5,6,4,8,9,2,3,56,1]
i=a.index(max(a))
a[i],a[0]=a[0],a[i]#
j=a.index(max(a))
a[j],a[-1]=a[-1],a[j]
print(a
  • 题目068:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
a=[5,6,4,8,9,2,3,56,1]
b=a[-3:]+a[:-3]
print(b)

题目069:有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

n=34
arr=list(range(1,n+1))
a=arr
b=[]
count=0
while len(a+b)>1:
    num=a.pop(0)
    count+=1
    if count%3!=0:b.append(num)
    if a==[]:
        a=b
        b=[]
print(a[0])
  • 题目070:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
def getlength(string):
    return len(string)
if __name__=='__main__':
    x='dakf.LJFIRH'
    print(getlength(x))
  • 题目076:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n
n=17
ls=sum([1/i for i in range(n,0,-2)])
print(ls)

题目078:找到年龄最大的人,并输出。

person = {“li”:18,“wang”:50,“zhang”:20,“sun”:22}

name=''
age=0
person = {"li":18,"wang":50,"zhang":20,"sun":22}
for p in person.keys():
    if person.get(p)>age:
        name,age=p,person.get(p)
print(name,age)

  • 题目080:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
for total in range(10000):
    t=total
    remain=lambda t:(t-1)/5*4
    for i in range(5):
        t=remain(t)
        if t%1!=0:
            break
    else:
        print(total,t)   #在for循环下else表示五次t都满足结果才输出
  • 题目081:809*??=800*??+9*?? 其中??代表的两位数,

809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。

求??代表的两位数,及809*??后的结果。

l=lambda x:len(str(x))
for i in range(100):
    if l(809*i)==4 and l(8*i)==2 and l(9*i)==3:#py中且不用&表示用and表示、
        x=i
        print(x)
print(809*x)
  • 题目082:八进制转换为十进制
print(bin(10)) #十转2
print(oct(10)) #十转8
print(hex(10))#十转16
print(int('数据',2/8/16))#2/8/16转十进制
  • 题目083:求0—7所能组成的奇数个数。
    报错:invalid literal for int() with base 10: ‘’
    进行了int强制数据类型转换int(),但是对象中出现了‘’,即空字符串是非法的
s=[i for i in '01234567']
arr=[]
import itertools
for i in range(1,9):
    a=list(itertools.permutations(s,i))
    l=list(map(lambda x:int(''.join(x)),a))  #使用int防止出现02等
    arr=arr+l
    print(i,len(l))
arr1=set(arr)  #为什么会出现相同的数字,比如0123和123
arr2=list(filter(lambda x:x%2==1,arr1))
print(len(arr2))

题目089:某个公司采用公用电话传递数据,数据是四位的整数,

在传递过程中是加密的,加密规则如下:

每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

x=1234
c=5
q,b,s,g=x//1000,x//100%10,x//10%10,x%10
y=(g+c)%10*1000+(s+c)%10*100+(b+c)%10*10+(q+c)%10
print(y)
  • 题目094:时间函数举例4,一个猜数游戏,判断一个人反应快慢。
import time,random
print('《猜大小0~1000之间》')
x=random.randint(0,1000)
flag=input('是否开始(Y/N):')
if flag=='Y':
    s=time.time()
    while 1:
        m=int(input('请输入一个数字;'))
        if m>x:
            print('猜大了')
        elif m<x:
            print('猜小了')
        else:
            print('bingo!')
            break
    e=time.time()
    print('耗时%.2f'%(e-s))
    print(time.sleep(5))

题目096:计算字符串中子串出现的次数。

x='babbabababbbababababbaba'
print(x.count('ab'))
  • 题目097:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
path='D:\\test.txt'
with open(path,'w+') as f:f.write('')
while 1:
    c=input('请输入字符:')
    if c=='#':
        break
    else:
        with open(path,'a+') as f:f.write(c)
  • 题目098:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
x=input('请输入一个小写字符:')
x=x.upper()
path='D:\\test.txt'
with open(path,'w+') as f:f.write(x)

over没写的题都是可忽略的,江湖再见!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值