2015-02-10 194 views
1

下面的代码应该从用户采取两个数字,然后说明哪个数字更高,9倍,因此“计数器< 10”除了它只需要两个数字一次,然后循环结束。我想我可以通过在我的循环中使用“counter = counter +1”来增加循环,但它似乎不起作用。任何帮助将不胜感激,谢谢!For循环应循环9次,反而循环一次

counter = 0 
for counter in range(counter < 10): 
    num1 = float(input("Enter number 1: ")) 
    num2 = float(input("Enter number 2: ")) 
    if num1 > num2: 
     print(num1) 
    else: 
     print(num2) 
    counter = counter + 1 

回答

6

counter < 10回报True等于1

>>> counter = 0 
>>> counter < 10 
True 
>>> True == 1 
True 

反过来,range(1)产量0(单项):

>>> list(range(counter < 10)) 
[0] 

这就是为什么它循环一次。


相反的range(counter < 10),你应该使用range(9)。您无需声明counter = 0并自行增加counter = counter + 1for语句照顾它:

>>> for i in range(3): 
...  print(i) 
... 
0 
1 
2 
+0

这工作!谢谢您的帮助。 – 2015-02-10 04:40:24

+0

@NicholasDePasquale,欢迎来到堆栈溢出!如果这对你有帮助,你可以通过[接受答案](http://meta.stackoverflow.com/a/5235)告诉社区。 – falsetru 2015-02-10 04:50:58

1

counter<10相当于1这就是为什么,环路只是运行一次(范围(1)= {0})。你的目的

for counter in range(10): 
    ... 

counter = 0 
while(counter<10): 
    ... 
    counter+=1 

您可以使用。

0

为了让您更清楚,括号内的表达式首先被评估。如果您想使用for,那么您需要传递一个序列,for将通过该序列循环。 range()用于生成序列。但是在这里,你通过(count < 10)range(),这是一个条件。因此,尽管评价,它返回True因为counter为0(第一行初始化)和小于10该返回True相当于1,使其余部分则通过falsetru

描述如果你想传递一个条件,那么你应该使用while循环,而不是for。在for中,您甚至不需要分别初始化变量counter。如果你写: -

for counter in range(9): 

这将初始化变量counter,它会在每个迭代递增。

对于你的问题,你可以使用如下: -

for counter in range(9): 
    # No need to initialize counter 
    do_stuff 

# Initialize counter 
counter = 0 
while(counter <10): 
    do_stuff