python练习题和指针函数

python指针函数

可以理解为将一个变量指向一个函数,也就是将函数赋值给一个变量

补充知识:range() 函数用法

range(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
练习题-01

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)

def peven(n):
    result = 0
    for i in range(2,n+1,2):
        result+=1/i
    return result
def podd(n):
    result = 0
    for i in range(1, n + 1):
        result += 1 / i
    return result
def dcall(fun,n):
    return fun(n)
if __name__ == '__main__':
    input=int(input("n是多少:"))
    if input>0 and input%2 == 0:
        print(dcall(peven, input))
    elif input>0 and input%2 != 0:
        print(dcall(podd, input))
    pass
练习题-02

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。程序分析:关键是计算出每一项的值。

input01=int(input("项数:"))
input02=int(input("数值:"))
result=0
for i in range(1,input01+1):
    if i == 1:
        result = input02
    else:
        result = result*10+input02
print(result)
练习题-03

题目:求输入数字的平方,如果平方运算后小于 50 则退出。

def square(inputInt):
    if inputInt*inputInt < 50:
        return print("平方小于 50")
    else:
        print("平方:{}".format(inputInt*inputInt))
        square(int(input("输入数字:")))
square(int(input("输入数字:")))
练习题-04

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析:兔子对数的规律为数列1,1,2,3,5,8,13,21…;实际上还是斐波那契数列问题。

rabbit=1
LastMonth=1
for i in range(1,13):
    if i >= 3:
        rabbit=rabbit+LastMonth
        LastMonth=rabbit-LastMonth
        # print(rabbit)
    # else:
        # print(rabbit)
print(rabbit)
练习题-05

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

data=[]
datalist=list(str(input("数据:")))
for i in range(len(datalist)):
    datalist[i]=str((int(datalist[i])+5)%10)
print("".join(datalist))
intermediator=datalist[0]
datalist[0]=datalist[3]
datalist[3]=intermediator
intermediator=datalist[1]
datalist[1]=datalist[2]
datalist[2]=intermediator
print("".join(datalist))
练习题-06

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

number=1
for i in range(1,10):
    number=(number+1)*2
print(number)
练习题-07

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。需要注意,任何一人都只能和一个人匹配进行比赛

abc=['a','b','c']
xyz=['x','y','z']
for aitme in abc:
    for xitme in xyz:
        if aitme == 'a' and xitme != 'x' and xitme != 'y':
            print('{}和{}比'.format(aitme,xitme))
        elif aitme == 'c' and xitme != 'x' and xitme != 'z':
            print('{}和{}比'.format(aitme, xitme))
print('b和x比')
练习题-07 —— 更好的解决方案
def findName():
	for a in range(ord('x'),ord('z') + 1):
	    for b in range(ord('x'),ord('z') + 1):
	        if a != b:#这里的目的是:一旦a和x,y,z其中之一匹配了,那么b就不能再和之匹配,x,y,z中任何一个不能同时跟两个人匹配比赛
	            for c in range(ord('x'),ord('z') + 1):
	                if (a != c) and (b != c):#这里也一样,避免重复
	                    if (a != ord('x')) and (c != ord('x')) and (c != ord('z')):
	                    	print 'order is a -- %s\t b -- %s\tc--%s' % (chr(a),chr(b),chr(c))

def main():
	findName()
	
if __name__ == '__main__':
	main()
补充知识:

ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

练习题-08 —— 更好的解决方案

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

i = 0
j = 1
sumAll = 0
while (i < 5):
   sumAll = 4 * j # 剩余的
   for i in range(0,5):#一个一个的分
      if(sumAll % 4 != 0):
         break #这个猴子没分完,继续分
      else:
         i += 1 #如果剩余4份,那这个猴子就分完了,到下一个猴子
      sumAll = (sumAll / 4) * 5 + 1 #拿走前的
   j += 1 #每个猴子分到的
print (sumAll)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知勤者笔记

给点吧,没动力了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值