1.判断一个函数是否为素数的函数要怎么编写?
题目要求应用循环语句,对整数N,从2一直除到N的平方根。
2.若函数体内和函数体外,均定义了一个变量x,且取值不同。当调用该函数时,x应该取哪个数值?
两道问题,一道道来。
第一道,直接给你代码
import math
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
sqrt_n = math.isqrt(n)
for i in range(3, sqrt_n + 1, 2):
if n % i == 0:
return False
return True
第二道,
先内后外,内部有x,不用外部的x,也不会影响外部的x。
函数内部是局部变量,只在该函数体内有效,作用域在该函数内,优先级高,即使你在函数体外有一个同名的变量,函数内的变量也不会影响到它。
当然尽量别这样弄,没必要给自己找麻烦是不
如果有帮助,请点击一下采纳该答案~谢谢
开一个大数组记录中间结果,如果一个状态被计算过,则直接查表,否则再递归计算。
总共有 n 个状态,计算每个状态的复杂度是 O(1),所以时间复杂度是 O(n)。但由于是递归计算,递归层数太多会爆栈。
res = [None]*100000
def F2(n):
if n <= 1: return max(n, 0)
if res[n]: return res[n] # 如果已存在则直接查找返回结果
res[n] = F2(n-1)+F2(n-2) # 不存在则计算
return res[n]
问题一解答:
可以通过以下代码实现:
import math
def is_prime(n):
"""判断一个数是否为素数"""
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
该函数先判断给定的数n是否小于2,若小于2则直接返回False,因为小于2的数不是素数。
接着从2开始循环除到n的平方根,若n能够整除i,则说明n不是素数;否则就继续循环。
如果循环结束了都没有找到n的因数,则说明n是素数,返回True。
问题二解答:
如果函数内外都定义了一个名为x的变量且取值不同,那么调用该函数时,默认情况下取值是函数内部定义的局部变量x的值。因为在Python中,访问一个变量时,解释器会首先查找它是否在函数内定义,如果在,则优先使用它。
若需要在函数内部修改外部定义的变量x,则需要使用global关键字进行声明。例如:
x = 1
def change_x():
global x # 声明x为全局变量
x = 2
change_x()
print(x) # 输出2
这里的global语句表示将变量x声明为全局变量,也就是告诉解释器,x不是局部变量,而是一个全局变量,可以在函数内外进行访问和修改。
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
def is_prime(n):
x = 2
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
x = 3
print(is_prime(9)) # False
print(is_prime(11)) # True
因为在函数体内对变量x进行了两次赋值,所以在第二次赋值时,函数体外定义的变量x的值会被覆盖。因此,应该取函数体外定义的变量x的值。