Python函数问题

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。
函数内部是局部变量,只在该函数体内有效,作用域在该函数内,优先级高,即使你在函数体外有一个同名的变量,函数内的变量也不会影响到它。
当然尽量别这样弄,没必要给自己找麻烦是不


如果有帮助,请点击一下采纳该答案~谢谢

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7513449
  • 这篇博客也不错, 你可以看下python练习题:编写函数,接收n个数字,求这些参数数字之和。并调用测试函数
  • 除此之外, 这篇博客: 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现中的 算法二:记忆化搜索 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 开一个大数组记录中间结果,如果一个状态被计算过,则直接查表,否则再递归计算。
    总共有 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]
    
  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 量化交易学习路线-上小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题一解答:

    可以通过以下代码实现:

    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不是局部变量,而是一个全局变量,可以在函数内外进行访问和修改。

  1. 素数判定函数可以用循环从2到N的平方根去判断,在判定到某一整数时,若该整数不是质数,则不是素数。
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

  1. 若函数体内和函数体外,均定义了一个变量x,且取值不同。当调用该函数时,应该取函数体外定义的变量x的值。
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的值。