2015-11-30 3 views
0

Я решил изучить python, и я выбрал книгу «Книга python», чтобы сделать это, но я столкнулся с проблемой при кодировании одной из программ упражнений, я делаю программу, которая показывает, как работают структуры управления, но он застревает в цикле while, я думаю, что это потому, что логическая переменная (isint) не устанавливает значение true, поэтому она просто застряла там, но я не уверен, потому что я новичок в программировании ,Проблемы, возникающие при использовании python (новое для программирования)

#!/usr/bin/env python2 
import sys 
target_int=raw_input("How many integers? ") 

try: 
    target_int=int(target_int) 
except ValueError: 
    sys.exit("You must enter an integer") 

ints=list() 
count=0 

while count<target_int: 
    new_int=raw_input("Please enter integer{0}:".format(count+1)) 
    isint=False 
    try: 
     new_int=int(new_int) 
    except: 
     print("You must enter an integer") 
if isint==True: 
    ints.append(new_int) 
    count+=1 

print("Using a for loop") 
for value in ints: 
    print(str(value)) 

print("Using a while loop") 
total=len(ints) 
count=0 
while count<total: 
    print(str(ints[count])) 
    count+=1 

Я хотел бы получить этот результат каждый раз, когда я запустил программу:

[email protected]:~/Python$ ./construct.py 
How many integers? 1 
Please enter integer1:2 
Please enter integer1:3 
Please enter integer1:4 
Please enter integer1:4 
Please enter integer1:23 
Please enter integer1:13 

Как вы можете видеть, независимо от того, что я ставлю там цикл в то время как только продолжает идти.

+0

Вы никогда не измените 'isint', поэтому он всегда будет 'false'. Поэтому оператор 'if' никогда не будет выполнен, то есть' count' никогда не будет изменен, что означает, что цикл 'while' будет работать вечно. – MattDMo

+0

Да, я подумал об этом, но, будучи полным новичком на этом языке, я думал, что было бы хорошо оставить его таким, потому что так оно и было написано в книге, кроме того, он сказал, что как только заявление о завершении закончится, он собирался Станьте верным –

ответ

1

Отступ имеет важное значение в Python:

while count<target_int: 
    new_int=raw_input("Please enter integer{0}:".format(count+1)) 
    isint=False 
    try: 
     new_int=int(new_int) 
    except: 
     print("You must enter an integer") 
if isint==True: 
    ints.append(new_int) 
    count+=1 

Это два отдельных блоков кода: if isint==True: часть не внутри while count<target_int: блока.

Вы должны изменить его к этому:

while count<target_int: 
    new_int=raw_input("Please enter integer{0}:".format(count+1)) 
    isint=False 
    try: 
     new_int=int(new_int) 
    except: 
     print("You must enter an integer") 
    if isint==True: 
     ints.append(new_int) 
     count+=1 

Кроме того, isint никогда не устанавливается ничего, кроме False, в любом месте. Таким образом, тело вашего оператора if никогда не будет выполнено.

Возможно, вы захотите установить isint в True, когда вы знаете, что ввод является допустимым целым числом.

+0

Спасибо, мне очень помогли, это ощущение смущения новичков вызывает меня сейчас –

1

Вы не устанавливаете флаг isint в true при проверке целого числа.

while count<target_int: 
    new_int=raw_input("Please enter integer{0}:".format(count+1)) 
    isint=False 
    try: 
     new_int=int(new_int) 
     isint=True 
    except: 
     print("You must enter an integer") 
    if isint==True: 
     ints.append(new_int) 
     count+=1 
+0

Ваш ответ тоже помог мне, спасибо! –

0

Сначала ваши отступы выглядят неправильно:

if isint==True: 
    ints.append(new_int) 
    count+=1 

Затем следует добавить isint = True в (в конце) блок

try: 
    new_int=int(new_int) 
Смежные вопросы