#函数练习 ''' 对于一个十进制的正整数,定义f(n)为其各位数字的平方和,如: f(13) = 1**2 + 3**2 = 10 f(207) = 2**2 + 0**2 + 7**2 = 53 下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b, 且k*f(n)=n 输入: 第一行包含3个正整数k,a, b, k>=1, a,b<=10**18, a<=b; 输出: 输出对应的答案; 范例: 输入: 51 5000 10000 输出:3 ''' def f(n): #定义一个函数 back = 0 #返回值初始值附为0 for item in str(n): # 遍历整个字符串的所有单个元素 back +=int(item)**2 return back def isOk(k,n): #判断是否满足k*f(n)=n这个条件 if k * f(n) == n: return True else: return False def main(): #定义主函数 k=51 a=5000 b=10000 count=0 #初始数量为0 for i in range(a,b+1): if isOk(k,i): count +=1 print(count) main() #执行主函数 #作用域: #全局作用域:作用于整个脚本 #局部作用域:在函数运行时生效,函数运行结束则释放 num=10 print('out fun : id=',id(num)) def fun(): #局部作用域 num=2 print('in fun:id=',id(num)) print('in fun:num=',id(num)) #当函数执行结束,变量num的值2被释放掉 fun() print('out fun:num=%s'%(num)) #global关键字 num=10 def fun(): global num #通过global关键字声明局部变量成为全局变量,让函数执行结束,2依然生效 num = 2 fun() print(num) #函数练习 ''' 1.Collatz序列 编写一个名为collatz()的函数,它有一个名为number的参数。 如果参数是偶数,那么collatz()就打印出number//2,并返回 该值。如果number是奇数,collatz()就打印并返回3*number+1。 然后编写一个程序,让用户输入一个整数,并不断对这个数 调用collatz(),直到函数返回值1(令人惊奇的是,这个序列 对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学 家也不能确定为什么。你的程序在研究所谓的“Collatz序列”, 它有时候被称为“最简单的、不可能的数学问题”)。 ''' def collatz(number): if number %2==0: #判断是否为偶数 return number//2 else: return 3*number+1 def main(): num=int(input('数字:')) while True: if collatz(num)==1: print(1) break else: num=collatz(num) print(num) main() #参数检测 print(isinstance(1,int)) #True isinstance(1.0,float) #True #函数参数的顺序 #(必选参数,默认参数,可变参数,关键字参数) def fun(num1,num2=3,*args,**kwargs): pass #参数易错点 #定义函数,默认参数的默认值尽量不是可变参数; def fun(li=[]): li.append('hello') return li print(fun()) #迭代 #iterable:可迭代的,即也就是可以 for循环的 # s='hello' # for (int i=0,i<length(s);i++) from collections import Iterable isinstance(1,int) print(isinstance(1,Iterable)) print(isinstance({1,2,3},Iterable)) print(reversed([1,2,3,4])) #<list_reverseiterator object at 0x10fb45eb8> #列表生成式 import random li = [] for i in range (10): li.append(random.randint(1,10)) print(li) ##普通的列表生成式: print([random.randint(1,10) for i in range(10)]) print([i*i for i in range(8)]) #升级版本 #1,找出1~10之间所有的偶数 print([i for i in range(1,11) if i%2==0]) #2.找出1~1000之间所有的质数 def isPrime(num): for j in range(2,num): if num%j==0 : #判断是否为质数 return False else: return isPrime print([i for i in range(1,1001) if isPrime(i)]) #3.for 嵌套for 循环 print([i+j for i in "ABC" for j in '123']) #列表生成式练习 #1。将列表中的所有内容都变为小写: li=['HEllo','XiaoMi'] print([i.lower() for i in li ]) #['hello', 'xiaomi'] #2.找出/var/log/目录中,所有以.log结尾的文件名或者目录名; import os print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')]) #字典生成式 d = dict(a=1,b=2) print('小写的字典:',d) ##1.需求1:将所有的key值变为大写: #1-1。传统方法; new_d={} for i in d: #'a','b' new_d[i.upper()]=d[i] print('key转化为大写的字典:',new_d) #1-2.升级后的; print({k.upper():v for k,v in d.items()}) ##需求2:大小写key值合并,统一以小写key值输出 d=dict(a=2,b=1,c=2,A=5,B=9,C=3) print({k.lower():d.get(k.lower(),0)+d.get(k.upper(),0) for k in d}) ##需求3:把字典的key和value值调换: d={'a':'1','b':'2'} print({v:k for k,v in d.items()}) #集合生成式 print({i**2 for i in {1,2,3}}) print({i**2} for i in {1,2,3,9,12} if i%3==0) #打印斐波那契数列列前十十列列,示例例如下(语言言不不限): #1 1 2 3 5 8 13 21 34 55 .... def fib(num): #定义斐波那契函数 a,b,count =0,1,1 #a=0,b=1,count=1 while count <= num: print(b) a,b=b,a+b #a=2,b=3 count +=1 fib(90)
函数的应用
猜你喜欢
转载自blog.csdn.net/xijiao_jiao/article/details/80260184
今日推荐
周排行