Я использую оператор If внутри цикла for, но оператор If пропускается даже после выполнения условия
x=raw_input().split(" ")
c=[]
for a in x:
b=1
if a<0:
print "Please enter a number greater than or equal to 0"
else:
if (a==1 or a==0 ):
print "1"
for i in range(1,int(a)+1):
b=b*i
c.append(str(b))
print ",".join(c)
программа должна найти факториал, я получаю результат. Если кто-то вводит отрицательное число, он не должен возвращать факториал, но это возвращает. Я просто хочу знать, почему условия if и else пропускаются.
На данном этапе вам действительно не следует тратить усилия на изучение Python 2. Вместо этого рассмотрите возможность установки и изучения Python 3. Поддержка Python 2 прекращается 1 января.
Я записался на курс, и есть ли небольшая разница между Python 2 и 3?
Возможно, вы захотите преобразовать ввод в int перед выполнением операций с int. Изменить это
x=raw_input().split(" ")
к
x=map(int, raw_input().split(" "))
но я думаю, что это все равно будет вычислять facotrial для отрицательных чисел в коде SO.
Это если if a<0:
пропускается.
но в вопросе - цикл for находится вне оператора if.
x = "-2 3 6 -3".split(" ")
c=[]
for a in x:
b=1
if int(a)<0:
print ("Please enter a number greater than or equal to 0" )
continue
else:
if (a==1 or a==0 ):
print ("1" )
for i in range(1,int(a)+1):
b=b*i
c.append(str(b))
print (",".join(c))
п/п:
Please enter a number greater than or equal to 0
Please enter a number greater than or equal to 0
6,720
Два изменения: int(a)
в условии if и если вы не хотите вычислять факториал для отрицательных чисел, добавьте continue
Сравнение нить с количество возвращает False
в качестве результата
'-2'< 0 ---> False --> if condition will be skipped
Преобразуйте нить в целое число, поскольку факториал применяется только к целому числу
int('-2') < 0 ---> True --> if condition will be executed
x = raw_input().split(" ")
возвращает строковый тип данных в списке
так что вы не можете использовать int
для всего списка x
,
только одна строка в то время
При вызове условия if вы рассматриваете только один элемент в списке,
then convert from string to int before comparing to 0 --> int(a) < 0
The second point is related to indentation
print (",".join(c))
should be included inside theelse
loop
Также
if (a==1 or a==0 ):
print "1"
не требуется, так как об этом позаботились в цикле for ниже
x=raw_input().split(" ")
c=[]
for a in x:
b=1
if int(a) < 0:
print "Please enter a number greater than or equal to 0"
else:
for i in range(1,int(a)+1):
b=b*i
c.append(str(b))
print ",".join(c)
Приятно слышать. Пожалуйста, добавьте в код продолжение. тогда он пропустит вычисление facotrial для отрицательного числа