蓝桥杯备赛:序列和

发布于:2025-03-31 ⋅ 阅读:(26) ⋅ 点赞:(0)

题目:

输入:一个整数n

求1加到这个整数的和

川川菜鸟的想法:

写一个首相加末项乘以项数除以二的等差数列求和函数

再调用函数,输出返回值

按照他的想法,我写下的代码是:

#序列和

def sum_of_sequence(n):
    t = (1+n) * n / 2
    return t

n = int(input())
return sum_of_sequence(n)

复述自己的错误:return只能用在函数里,不能用在主程序中

调用函数时要额外借助一个变量,承接函数返回值,并把它转换成int形式,

修改后的代码是:

#序列和

def sum_of_sequence(n):
    t = (1+n) * n / 2
    return t

n = int(input())
s = int(sum_of_sequence(n))
print(s)

运行正确

自己的试错实践:

1、把主函数中的变量名s换成n会怎么样?

#序列和

def sum_of_sequence(n):
    t = (1+n) * n / 2
    return t

n = int(input())
n = int(sum_of_sequence(n))
print(n)

输出结果:

没影响,原因及步骤:

输入值赋给n,此时n等于输入值,n被传入函数进行函数运算,返回值又被赋值给变量n,我的疑惑是,那这个n和原来那个n是一个吗?我觉得不是了,这个n是一个新的对象

kimi的回答:

  • 原来的 n 和新的 n 是同一个吗?
    • 从语义上来说,它们是同一个变量(因为它们共享同一个变量名 n),但它们的值是不同的。
    • 原来的 n 是用户输入的值,新的 n 是函数返回的值。
    • 这个过程可以理解为:原来的 n 被“覆盖”了,它现在指向了一个新的对象。
  • n = int(input()) → n 的值是 5。
  • sum_of_sequence(n) 被调用,函数内部的 n 是 5。
  • 函数计算 (1 + 5) * 5 / 2 = 15,返回 15。
  • n = int(sum_of_sequence(n)) → 全局变量 n 被重新绑定为 15。
  • print(n) → 输出 15。
  • 全局变量 n 和函数内部的局部变量 n 是不同的。

  • 函数返回值重新绑定了全局变量 n,使其指向一个新的对象。
  • 从语义上来说,全局变量 n 是同一个变量,但它的值被更新了。

目录

川川菜鸟的想法:

写一个首相加末项乘以项数除以二的等差数列求和函数

再调用函数,输出返回值

复述自己的错误:return只能用在函数里,不能用在主程序中

自己的试错实践:

1、把主函数中的变量名s换成n会怎么样?

kimi的回答:

总结起来就是,主函数的n是全局变量,内层函数的n局部变量承接了全局变量的函数值,传回结果给主函数的全局变量,传回的结果指向一个新的对象。如果用s:就是新的全局变量s承接了这个值;如果用n,就是全局变量n承接了这个值,这个n和原来的n虽然变量名相同,但值被内层函数返回值覆盖,对象也不是一个,仅仅是变量名相同而已。

用sum for循环累加:

要是等差数列的公差不唯1,而是3,那么,在for循环的range里加上一个步长就好了


,主函数的n是全局变量,内层函数的n局部变量承接了全局变量的函数值,传回结果给主函数的全局变量,传回的结果指向一个新的对象。如果用s:就是新的全局变量s承接了这个值;如果用n,就是全局变量n承接了这个值,这个n和原来的n虽然变量名相同,但值被内层函数返回值覆盖,对象也不是一个,仅仅是变量名相同而已。

用sum for循环累加:

思路:初始值等于0,写个循环,一个一个加

#序列和 for循环累加

n = int(input())
sum_n = 0
for i in range(1,n+1):
    sum_n += i
print(sum_n)

要是等差数列的公差不唯1,而是3,那么,在for循环的range里加上一个步长就好了