“Python题库:函数”的版本间的差异
第283行: | 第283行: | ||
print('WHUT' + str(ID)) | print('WHUT' + str(ID)) | ||
print(countNumber)</nowiki> | print(countNumber)</nowiki> | ||
+ | |||
+ | ==自定义幂函数== | ||
+ | ===描述=== | ||
+ | |||
+ | 定义一个函数实现整数的幂运算,用以计算 x 的 n 次方。 | ||
+ | | ||
+ | ===输入格式 === | ||
+ | |||
+ | 在一行内输入两个非负整数 x 和 n,数字间用空格分隔。 | ||
+ | |||
+ | ===输出格式=== | ||
+ | |||
+ | x 的 n 次幂的运算结果 | ||
+ | |||
+ | ===输入输出示例=== | ||
+ | 输入 输出 | ||
+ | 示例 1 2 3 8 |
2021年11月18日 (四) 23:03的版本
目录
二分法求平方根B
描述
设计一个用二分法计算一个大于或等于 0 的实数 n 的平方根的函数sqrt_binary(n),实数 n和计算精度控制由用户在同一行内输入,用逗号进行分隔,输出结果保留8位小数。当(abs(x * x - n) )小于或等于设定的精度时,近似认为 x * x == n。
注:初始区间取[0,n+0.25]
输入格式
在同 行内输入一个实数 n(大于或等于0)和一个代表精度的数字(可用1e-m格式输入),逗号间隔
输出格式
第一行输出用自己设计的函数计算得到的平方根
第二行输出用math库开平方函数计算得到的平方根
输入输出示例
输入 输出
示例 1 5.0,1e-7
代码
import math def sqrt_binary(num, accuracy): """接收一个浮点数num和一个表示计算精度的浮点数accuracy为参数,用二分法计算浮点数的平方根x, 当 abs(x * x - num) <= accuracy时认为达到计算精度,以浮点数类型返回计算得到的平方根。""" low, high = 0, num + 0.25 # 设定初始区间 while True: # 构建无限循环 x = (high + low) / 2 # 假设平方根落在区间的二分之一处,即中点 if abs(x * x - num) <= accuracy: # 当误差小于计算精度时,终止循环 return x # 返回当前的x值为平方根 elif x * x - num < 0: # 当前x的平方小于num时,平方根应该位于右侧区间 low = x # 以当前数值为区间下限,缩小区间为原来的一半 else: # 当前x的平方大于num时,平方根应该位于左侧区间 high = x # 以当前数值为区间上限,缩小区间为原来的一半 n, error = map(float, input().split(',')) # 输入浮点数 n 和计算精度 print('{:.8f}'.format(sqrt_binary(n, error))) # 调用二分法函数计算平方根 print('{:.8f}'.format(math.sqrt(n))) # 用math库中的sqrt()计算平方根
代码2
import math def sqrt_binary(num,accuracy): p1,p2 = accuracy.split("e-") length = int(p2)+1 s =math.sqrt(num) s =round(s,length) return s n = float(input("请输入一个实数")) p = input("请输入精度数字") #print(p) result = sqrt_binary(n,p) print(result)
回文素数
描述
回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。
用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。
输入格式
输入一个正整数
输出格式
符合要求的回文素数
输入输出示例
def is_prime(n): """判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False 减小判定区间,减少循环次数,提升效率。 """ if n < 2: return False # 0、1、负数以及偶数都不是素数 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: # 能被2到其根号n之间的整数整除的数不是素数 return False else: return True # for循环正常结束,未遇到return的数是素数 def palindromic(num): """接收一个数字为参数,判定其是否为回文数,返回布尔值。""" if str(num) == str(num)[::-1]: return True else: return False def output_prime(num): """接收一个正整数num为参数,在一行中从小到大输出前num个回文素数。 函数无返回值 """ i = 2 # 从最小的素数2开始测试 count = 0 # 计数器置0 while True: # 无限循环 if palindromic(i) and is_prime(i): # 先判断回文再判断素数,效率高 print(i, end=' ') # i为回文素数时输出i,输出后不换行 count = count + 1 # 每发现一个回文素数计数增加1 if count == num: # 如果找到回文素数数量与要求数量相同时 break # 结束循环 i = i + 1 # 测试下一个数字 if __name__ == "__main__": n = int(input()) output_prime(n)
反素数
描述
反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的非回文数。例如:13和31都是素数,且13和31都不是回文数,所以,13和31是反素数。 输入一个正整数 n , 请输出从小到大排列的的前n个反素数,数字后面以一个空格进行分隔。
输入格式
输入一个正整数
输出格式
符合条件的反素数
输入输出示例
代码
def prime(n): if n <= 1: #小于2的数字单独处理 return 0 for i in range(2,int(n**(1/2)+1)): #根据素数定义判定是否是素数,是素数返回1 if n % i == 0: return 0 return 1 if __name__ == "__main__": n = int(input()) i = 2 count = 0 while True: if prime(i) and prime(int(str(i)[::-1])) and str(i) != str(i)[::-1]: #如果是反素数 print(i,end = ' ') #数字间空格分隔 count = count + 1 if count == n: break i = i+ 1
侯先生爬楼梯
描述
侯先生每天都会爬楼梯锻炼身体,他有时候一次上跨一级,有时候一次上跨两级...有一天侯先生想弄明白一个很难的问题:从最下面的第1级开始到顶端的第n级一共有多少种走法呢?比如n是3时,有两种走法(或者直接从第1级上跨两步到第3级,或者从第1级跨一步到2级再跨一步到第3级)。
请你帮帮侯先生,给你n(1<n<40)的值,你帮忙计算并输出有多少种爬到顶端的方法。
输入格式
输入n的值,n是1到40之间的整数。
输出格式
输出一共有多少种从第1级台阶到第n级台阶的走法。
代码
参考代码: n=eval(input()) li=[0]*n if n==2: print(1) elif n==3: print(2) else: li[n-1]=1 li[n-2]=2 for i in range(n-3,0,-1): li[i]=li[i+1]+li[i+2] print(li[1]) #或者使用递归来实现: def upstrs(n): if n==2: return 1 elif n==3: return 2 else: return upstrs(n-1)+upstrs(n-2) n=eval(input()) li=[0]*n print(upstrs(n))
计算ID号
描述
我的微信ID是大写字母WHUT后面的数字是两个素数连在一起,大的在前,小的在后,如果我告诉你两数的乘积是多少,你能计算出我的ID号吗?
如果输入一个[0-9]之间的数字,你能统计出从1开始到我ID中的数字的序列里,一共出现多少次这个数字吗?
输入格式
第一行输入ID中两个素数的乘积
第二行输入一个[0-9]之间的数字
输出格式
第一行输出ID号
第二行输出数字的次数
输入输出示例
输入 输出 示例 1 196409 3 WHUT997197 599140
代码
def isPrime(n): # 判断参数 n 是否为素数的函数 if n < 2: # 小于2的数字都不是素数 return False for i in range(2, int(n ** 0.5) + 1): # 根据素数定义判定是否是素数,是素数返回1 if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数 return False else: # 若for循环未遇到return正常结束,则n是素数 return True def checkId(n): if n % 2 == 0 and isPrime(n // 2): # 如果n能被2整除,单独处理,提高效率 return int(str(n // 2) + str(2)) else: for num in range(3,n//2+1,2): # 如果n不能被2整除,则两个素数不包括2,都是奇数 if isPrime(num) and n % num == 0 and isPrime(n // num): # isPrime(n // num)放在最后,利用短路效应,可以使大数的素数判定次数最少 return int(str(n // num) + str(num)) # 返回值转字符串拼接后再转整数 def countnumber(n,num): m, countnum = 1, 0 while n//m > 0: high, mod = divmod(n, m*10) curNum, low = divmod(mod, m) if curNum > num: countnum += high*m + m elif curNum == num: countnum += high*m + low + 1 else: countnum+= high*m m = m*10 return countnum if __name__ == '__main__': n = int(input()) # 输入ID,整数,保证是两个素数的积 number = int(input()) # 输入0-9之间的一个数字 ID = checkId(n) countNumber = countnumber(ID,number) # 统计 number的个数 print('WHUT' + str(ID)) print(countNumber)
自定义幂函数
描述
定义一个函数实现整数的幂运算,用以计算 x 的 n 次方。
输入格式
在一行内输入两个非负整数 x 和 n,数字间用空格分隔。
输出格式
x 的 n 次幂的运算结果
输入输出示例
输入 输出
示例 1 2 3 8