2013-06-28 4 views
5

Я новичок в Python и с помощью V2.7.2 Вот что я пытался выполнить в командной строкеPython: Почему этот код выполняется?

p = 2 
while(p>0): 
    for i in range(10): 
      print i+1 , p 
      p-=1 

ожидается выход был

1 2 
2 1 

Однако фактическая выходной is

1 2 
2 1 
3 0 
4 -1 
5 -2 
6 -3 
7 -4 
8 -5 
9 -6 
10 -7 

Почему это происходит? и Как достичь ожидаемого поведения?

+0

Действительно ли это выход или он доходит до 10? – doctorlove

+0

@doctorlove это определенно не выход OP. – Woot4Moo

+0

Извините! Я сделал редактирование! Благодаря! –

ответ

6

условие, пока проверяется только раз после того, как для отделки петель. Вы могли бы сделать это вместо

p = 2 
for i in range(10): 
    if p <= 0: 
     break 
    print i+1 , p 
    p-=1 
5

Это output I get:

1 2 
2 1 
3 0 
4 -1 
5 -2 
6 -3 
7 -4 
8 -5 
9 -6 
10 -7 

Ваш вопрос, почему он работает. Ваш внешний наиболее условный - это цикл while, который является истинным при первом выполнении, однако он запускается прямо в , вложенный в цикл. Когда это произойдет, while не будет проверяться до тех пор, пока цикл forне завершит свое первое выполнение (именно поэтому p = -7).

Что вы хотите this:

p = 2 
for i in range(10): 
    if p <= 0: 
     break 
    print i+1 , p 
    p-=1 

, который дает выход:

1 2 
2 1 
+0

кричит! я сделаю редактирование благодарю! –

+0

вы можете сделать это '1 2' ' 2 1' Thats, что я ищу для благодарности! –

+0

@JosyulaKrishna фиксированный. Спасибо, что поймал это. – Woot4Moo

0

Добро пожаловать на питона :-)

Вы можете попробовать это:

p = 2 
for i in range(1, p+1): 
    print i, 
print 
for i in range(p, 1, -1): 
    print i, 

Это напечатает желаемый результат. Не только для 2, но и если вы измените значение p, он напечатает тот же результат.

Функция диапазона может принимать три аргумента: начало, остановка и шаг. Если вы дадите диапазон (x), он начнется как 0, а шаг 1 и перейдите к x (x не включен). Если вы укажете диапазон (y, x), он начнется с y и перейдет к x со значением шага по умолчанию как 1.

В примере я использовал диапазон (p, 0, -1), который принимает начальную точку как «p», выполните шаг -1 и уменьшите значение p до 1 и завершите работу. Чтобы узнать больше о диапазоне, нажмите here.

+0

Спасибо! однако я пытаюсь решить это, используя условные обозначения. –

+0

@ JosyulaKrishna Условные обозначения? Вы имеете в виду через утверждение или через цикл? – thiruvenkadam

+0

да что я имею в виду –

Смежные вопросы