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)