Учебно-методические материалы для студентов кафедры АСОИУ

Python 3. Циклы. Операторы while и for

Задача: Напишите программу, которая вводит два целых числа и находит их произведение, не используя операцию умножения. Учтите, что числа могут быть отрицательными.

Решение

a, b = map(int, input().split())
res, s = 0, 1
if b<0:
b = -b
s = -1
while b:
res = res + a
b = b - 1
if s < 0:
res = -res print (res)

Задача: Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел. Программа должна вывести в одну строчку N первых чётных натуральных чисел, разделив их пробелами.

Решение

n = int(input())
for i in range (1,2*n,2):
print (i+1)

Задача: Напишите программу, которая вводит натуральные числа a и b и выводит сумму квадратов натуральных чисел в диапазоне от a до b.

Решение

a, b = map(int, input().split())
if a > b:
t = a
a = b
b = t
s = 0
for i in range (a, b+1):
s = s+i*i
print (s)

Задача: Напишите программу, которая вводит четыре натуральных числа (a, b, c и d) и находит все пятизначные числа, которые при делении на a дают в остатке b , а при делении на c дают в остатке d .

Входные данные Первая входная строка содержит два натуральных числа, разделённые пробелами: a и b. Вторая строка содержит натуральные числа c и d, также разделённые пробелом. Гарантируется, что 0 ≤ b ≤ a и 0 ≤ d ≤ c. Выходные данные Программа должна вывести в одну строчку через пробел все пятизначные натуральные числа, которые при делении на a дают в остатке b, а при делении на c дают в остатке d . Если таких чисел нет, программа должна вывести число -1.

Решение

x = input().split() y = input().split()
a = int(x[0])
b = int(x[1])
c = int(y[0])
d = int(y[1])
if a==0 or c==0: print(-1)
else:
res = ''
for i in range(10000, 99999):
if (i%a == b) and (i%c == d):
res = res+" "+str(i)
res = res.strip()
if res == '': print(-1)	else: print(res)	

Задача: Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в K-ю степень (где K – количество цифр в числе) равна самому числу. Например:
153 = 1^3 + 5^3 + 3^3
Напишите программу, которая находит все числа Армстронга на отрезке [a, b].

Входные данные: Входная строка содержит два натуральных числа – значения a и b, разделённых пробелами. Гарантируется, что a ≤ b.

Выходные данные: Программа должна вывести в одну строчку все числа Армстронга на отрезке [a, b] , разделив их пробелами. Если таких чисел нет, программа должна вывести число -1.

Решение

x = input().split()
a = int(x[0])
b = int(x[1])
'''
a = 100
b = 400
'''
if a > b:
t = a
a = b
b = t
if a<0:
print (-1)
else:
res = ""
for i in range (a, b+1):
s = 0
t = len(str(i))
for j in str(i):
s = s + int(j) ** t if s == i:
res = res + str(s) + " "
res = res.strip()
if res == "":
print(-1) else:
print(res) 

Задача: Напишите программу, которая считает количество чётных цифр введённого числа.

Решение

n = int(input())
n = int(n)
k = 0
m = 0
while n>0:
if n%2==0:
k+=1
else:
m+=1
n=n//10
print(k)

Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит две одинаковых цифры, стоящие рядом (как, например, 221).

Решение

n = int(input())
res = "NO"
d1 = 0
d2 = 0
while n > 0:
d1 = n%10
d2 = n//10%10
if d1 == d2:
res = "YES"
n = n//10
print (res)

Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит по крайней мере две одинаковых цифры, возможно, не стоящие рядом (как, например, 212). Программа должна вывести слово 'YES', если в числе есть две одинаковые цифры, и слово 'NO', если такой пары цифр нет.

Решение

n = int(input())
res = "NO"
d1 = 0
d2 = 0
while n>0:
d1 = n%10
m = n//10
while m > 0:
d2 = m%10
if d1 == d2:
res = "YES"
m = m//10
n = n//10
print (res)

Задача: Модифицированный алгоритм Евклида для вычисления наибольшего общего делителя двух натуральных чисел, формулируется так: нужно заменять большее число на остаток от деления большего на меньшее до тех пор, пока остаток не станет равно нулю; тогда второе число и есть НОД. Напишите программу, которая реализует этот алгоритм.

Входные данные: Входная строка содержит два числа, разделённые пробелом – a и b .

Выходные данные: Программа должна вывести в одной строке два числа: сначала наибольший общий делитель двух введённых чисел, а затем – количество шагов цикла, которые были выполнены.

Решение

x = input().split() #Python 3.x
a = int(x[0])
b = int(x[1])
n = 0
while a!=0 and b!=0:
if a > b:
a = a % b
else:
b = b % a
n+=1
print (a+b, n)

Задача: Напишите программу, которая вычисляет сумму и произведение целых чисел, поданных на её вход. Ввод заканчивается числом 0.

Входные данные: Во входных строках записаны целые числа, по одному в каждой строке. В последней строке записано число 0.

Выходные данные: Программа должна вывести в одной строке сумму и произведение введённых чисел (не считая завершающий 0), разделив их пробелом.

Решение

summ, mul = 0, 1
while 1:
c = int(input())
if c == 0: break;
summ += c
mul *= c
print (summ,mul)

Задача: Напишите программу, которая вводит натуральное число N и определяет его факториал, то есть произведение натуральных чисел от 1 до N: N! = 1·2·{...}· N.

Решение

n = int(input())
f = 1
while n>1:
f *= n
n -= 1
print (f)

Задача: Напишите программу, которая выводит на экран все цифры числа, начиная с первой.

Входные данные: Входная строка содержит натуральное число N.

Выходные данные: Программа должна вывести все цифры введённого числа в одной строке, начиная с первой. Цифры отделяются пробелами.

Решение

n = int(input())
res = ""
while n>0:
res = str(n%10)+ " " + res
n = n//10
print (res.strip())

Задача: Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне от a до b. Входная строка содержит два натуральных числа: a и b. Гарантируется, что a ≤ b. Программа должна вывести в одной строке через пробел все простые числа на отрезке [a, b]. Если таких чисел нет, программа должна вывести 0.

Решение

x = input().split()
a = int(x[0])
b = int(x[1])
if a == 0: a = 1
res = ""
for i in range(a, b + 1):
for j in range(2,i):
if i%j == 0:
break
else:
res = res + " " + str(i)
if res != '':
print (res)
else:
print (0)

CC-BY-CA anonymous, 01.06.2017