在C#和Java中循环的酷炫方式似乎是使用foreach而不是C style for循环.
我有理由比C风格更喜欢这种风格吗?
我对这两种情况特别感兴趣,但请解决您需要解决的问题.
作为一门入门语言,我在Python学习中大约有两周的时间.我在Zed的"艰难学习Python"中提到了一点,他建议:
使用while循环只能永远循环,这意味着可能永远不会.这仅适用于Python,其他语言则不同.
我已经用Google搜索了所有内容,引用了我能做的一切,但我在世界上找不到任何理由为什么这会成为Python中的惯例.是什么让它与众不同?
当我在10年前放弃编程时,我在VB工作,并经常被告知摆脱我的For循环并使用While循环.我是一个黑客(就像我今天,虽然我当时写了很多代码),所以我只是做了我被告知的事情,而不是质疑它.好吧,现在我在质疑它.这是速度问题吗?是否只是为了避免逃避无限?
我期待找到数组中的最低正值及其在列表中的位置.如果列表中的值重复,则只关注FIRST实例.这就是我所拥有的,它包括我想要的但包括0.
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
Run Code Online (Sandbox Code Playgroud)
例如,如果,
myArray = [4, 8, 0, 1, 5]
然后位置:2,值:0
我希望它呈现位置:3,价值:1
在Python中,我可以实现一个带有步进计数器的循环和一个停止条件作为for循环的经典案例:
for i in range(50):
result = fun(i)
print(i, result)
if result == 0:
break
Run Code Online (Sandbox Code Playgroud)
fun(x)从整数到整数的任意函数在哪里.
我一直怀疑这是否是编码它的最佳方式(从Python语言,在可读性和效率方面)或者更好地将它作为while循环运行:
i = 0
result = 1
while result != 0 and i < 50:
result = fun(i)
print(i, result)
i += 1
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?特别是 - 我担心使用不合适的break陈述.
Stack Overflow 上有很多关于这个一般主题的问答,但它们要么质量很差(通常是初学者的调试问题暗示的),要么以其他方式错过了目标(通常是不够通用)。至少有两种极其常见的方法会使幼稚的代码出错,初学者从关于循环的规范中获益更多,而不是从将问题作为拼写错误或关于打印所需内容的规范中获益。所以这是我尝试将所有相关信息放在同一个地方。
假设我有一些简单的代码,可以对一个值进行计算x并将其分配给y:
y = x + 1
# Or it could be in a function:
def calc_y(an_x):
return an_x + 1
Run Code Online (Sandbox Code Playgroud)
现在我想重复计算 的许多可能值x。我知道for如果我已经有要使用的值列表(或其他序列),我可以使用循环:
xs = [1, 3, 5]
for x in xs:
y = x + 1
Run Code Online (Sandbox Code Playgroud)
while或者,如果有其他逻辑来计算值序列,我可以使用循环x:
def next_collatz(value):
if value % 2 == 0:
return value // 2
else:
return 3 * value + 1
def collatz_from_19():
x = 19
while x != 1:
x …Run Code Online (Sandbox Code Playgroud) 在Python 2.7中,我想根据for循环中满足的细节条件修改循环的步骤.像这样的东西:
step = 1
for i in range(1, 100, step):
if ...... :
step = 1
#do stuff
else:
step = 2
#do other stuff
Run Code Online (Sandbox Code Playgroud)
但似乎这不可能做到,step总是1.
谢谢.
奇怪的是,我的代码给了我第4781个数字,当我知道它是第4782个斐波纳契数(我和朋友比较).我不想提交,直到我的代码可以做到.
这是我的代码:
import sys
FibNums = []
a=1
b=2
c=3
FibNums.append(a)
FibNums.append(b)
FibNums.append(c)
for i in range(1, sys.maxsize):
a = b
b = c
c = a + b
FibNums.append(c)
if len(str(c)) == 1000:
break
print (len(FibNums))
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我找到错误吗?我检查了,我的列表没有跳过任何东西(它确实包含1作为第一个索引).谢谢!
def loop():
for i in range (0,9):
pass
if i == 3:
i = i +3
print(i)
loop()
Run Code Online (Sandbox Code Playgroud)
当前输出:
0
1
2
6
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
期待输出:
0
1
2
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
这是否必须对Python中创建堆栈帧的方式做些什么?为什么即使我们增加i,迭代次数也不会减少?