小编Eli*_*ias的帖子

如何使for循环在python中更易于理解?

我目前正在向一些相当年轻的学生教授一些python编程。我希望他们学习的一件事是如何编写for循环。

到目前为止,我向学生展示的方式是这样的:

for i in range(1,11):
    print(i)
Run Code Online (Sandbox Code Playgroud)

这给出了一个i从1到10 的循环。

我的问题是,对于学生来说,range(1,11)当他们希望循环上升到10时,他们需要写11作为第二个参数,这对学生来说似乎很奇怪。学生们发现这令人困惑。

在C / C ++和相关语言中,这样的循环可以这样写:

for(int i = 1; i <= 10; i++)
    { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

在我看来,表达循环的C ++方法更直观,因为在那种情况下,我可以显式编写1和10,这是我希望循环变量采用的第一个和最后一个值。

当在python中使用for循环时,我最终告诉学生,诸如“我们只想接受要在循环数达到10时编写11的代码,这有点烦人,但您只需要学习范围功能以这种方式起作用”。我对此不满意;我希望他们了解编程很有趣,而且恐怕这种事情会使它变得不那么有趣。

由于python通常被描述为强调可读性的语言,因此我怀疑有一种更好的方式来表达for循环,这种方式不会给我的学生造成混乱。

有没有更好和/或更少混淆的方法来用python语言表达这种for循环?

python loops

17
推荐指数
4
解决办法
931
查看次数

将 g++ 与 -mlong-double-128 一起使用时对 std::ostream::operator&lt;&lt;(__float128) 的未定义引用

我在名为 test.cc 的文件中包含以下小型 C++ 代码:

#include <iostream>
int main() {
  long double x = 3.3;
  std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

以正常方式编译(简单地 g++ test.cc)工作正常。

但是,当尝试使用 -mlong-double-128 选项时,存在链接问题:

$ g++ -mlong-double-128 test.cc 
/tmp/cccKog5D.o: In function `main':
test.cc:(.text+0x1f): undefined reference to `std::ostream::operator<<(__float128)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我尝试添加 -lquadmath 但问题仍然存在。

我用 g++ 5.4.0 和 6.1.0 版本尝试过此操作,两者的行为相同。

每当使用 << 运算符时,都可以通过强制转换为 double 来解决该问题,但我真的很想让它在不这样做的情况下工作。(背景是我有一个更大的研究代码,我希望能够使用 -mlong-double-128 进行编译以获得更高的精度,但由于这个问题而失败。)

关于如何解决这个问题有什么想法吗?

编辑:

现在我发现按照 @Niall 的建议使用 -mlong-double-128 重新编译 libstdc++ 库可以解决链接问题。

我下载了libstdc++源代码(gcc-6.1.0.tar.gz包的一部分)并配置如下:

../configure --enable-cxx-flags=-mlong-double-128 --prefix=/home/elias/slask/inst --disable-multilib
Run Code Online (Sandbox Code Playgroud)

然后,使用生成的 libstdc++.a 库文件,我可以构建我的 …

c++ precision gcc g++

5
推荐指数
0
解决办法
1528
查看次数

堆栈溢出是否总是导致分段错误?

在 Linux 中,当正在运行的程序尝试使用超过限制的堆栈空间(堆栈溢出)时,通常会导致“分段错误”错误并中止执行。

是否保证超出堆栈空间限制总是会导致分段错误错误?或者程序是否会继续运行,但可能由于数据损坏而出现一些错误行为?

另一种说法是:如果一个程序行为不当,产生了错误的结果,但没有崩溃,那么原因仍然是堆栈溢出吗?

编辑:澄清一下,这个问题不是关于“堆栈缓冲区溢出”,而是关于堆栈溢出,当程序使用的堆栈空间超过堆栈大小限制(Linux 中由 给出的限制ulimit -s)时。

linux stack-overflow runtime-error segmentation-fault

5
推荐指数
1
解决办法
535
查看次数