Курс на платформе stepik.org. Ссылка на курс: https://stepik.org/course/67.
Напишите программу, которая считывает с клавиатуры два числа a и b, считает и выводит на консоль среднее арифметическое всех чисел из отрезка [a; b], которые кратны числу 3.
В приведенном ниже примере среднее арифметическое считается для чисел на отрезке [-5; 12]. Всего чисел, делящихся на 3, на этом отрезке 6: -3, 0, 3, 6, 9, 12. Их среднее арифметическое равно 4.5.
На вход программе подаются интервалы, внутри которых всегда есть хотя бы одно число, которое делится на 3.
a, b = [int(input()) for i in range(2)] mean = 0 count = 0 for num in range(a, b + 1): if num % 3 == 0: mean += num count += 1 mean /= count print(mean) a, b = int(input()), int(input()) a = a + (-a % 3) b = b - (b % 3) print((a + b) / 2) Подробное объяснение:
Напишите программу, которая выводит часть последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 ... (число повторяется столько раз, чему равно). На вход программе передаётся неотрицательное целое число n — столько элементов последовательности должна отобразить программа. На выходе ожидается последовательность чисел, записанных через пробел в одну строку.
Например, если n = 7, то программа должна вывести 1 2 2 3 3 3 4.
n = int(input()) printed = 0 for i in range(1, n + 1): for j in range(i): print(i, end=' ') printed += 1 if printed == n: break if printed == n: break n = int(input()) count = 0 curr = 1 for i in range(n): print(curr, end=' ') count += 1 if count == curr: curr += 1 count = 0 n = int(input()) a = [] i = 0 while len(a) < n: a += [i] * i i += 1 print(*a[:n]) n = int(input()) for i in range(1, n + 1): print(int(0.5 + (2 * n) ** 0.5), sep=' ') Формула для последовательности:
Выведите таблицу размером
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 n = int(input()) mtx = [[0 for __ in range(n)] for _ in range(n)] # matrix num = 1 idnt = 0 # indent while num <= n*n: for i in range(idnt, n - idnt - 1, 1): # right mtx[idnt][i] = num num += 1 for i in range(idnt, n - idnt, 1): # down mtx[i][n-idnt-1] = num num += 1 for i in range(n - idnt - 1, idnt + 1, -1): # left mtx[n-idnt-1][i-1] = num num += 1 for i in range(n - idnt - 1, idnt, -1): # up mtx[i][idnt] = num num += 1 idnt += 1 for i in range(n): print(*mtx[i]) n = int(input()) mtx = [[0] * n for i in range (n)] i, j = 0, 0 for num in range(1, n * n + 1): mtx[i][j] = num if num == n * n: break if i <= j+1 and i+j < n-1: # right j += 1 elif i < j and i+j >= n-1: # down i += 1 elif i >= j and i+j > n-1: # left j -= 1 elif i > j+1 and i+j <= n-1: # up i -= 1 for i in range(n): print(*mtx[i]) Напишите функцию modify_list(l), которая принимает на вход список целых чисел, удаляет из него все нечётные значения, а чётные нацело делит на два. Функция не должна ничего возвращать, требуется только изменение переданного списка, например:
lst = [1, 2, 3, 4, 5, 6] print(modify_list(lst)) # None print(lst) # [1, 2, 3] modify_list(lst) print(lst) # [1] lst = [10, 5, 8, 3] modify_list(lst) print(lst) # [5, 4] def modify_list(l): for i in range(len(l)-1, -1, -1): if l[i] % 2 != 0: l.pop(i) else: l[i] //= 2 def modify_list(l): l[:] = [i//2 for i in l if not i % 2] Напишите программу, которая считывает из файла строку, соответствующую тексту, сжатому с помощью кодирования повторов, и производит обратную операцию, получая исходный текст.
Sample Input
a3b4c2e10b1 Sample Output
aaabbbbcceeeeeeeeeeb s = input().strip() i = 0 while i < len(s): j = i + 1 while j < len(s) and s[j].isdigit(): j += 1 print(s[i] * int(s[i+1:j]), end='') i = j s, d = input(), [] for i in s: if not i.isdigit(): d.append(i) else: d[-1] += i print(*[i[0] * int(i[1:]) for i in d], sep='') inp = open('input.txt', 'r') s = inp.readline() iter = filter(str.isalpha, s) idx = 0 n_char = next(iter, None) while n_char != None: n_char = next(iter, None) if n_char == None: break n_idx = s.find(n_char, idx + 1) if n_idx == -1: break count = int(s[idx + 1:n_idx]) print(s[idx] * count, sep='') idx = n_idx print(s[idx:][0] * int(s[idx+1:]), sep='') # выводим последнюю букву, которую не вывели в цикле inp.close() Напишите программу, которая считывает текст из файла (в файле может быть больше одной строки) и выводит самое частое слово в этом тексте и через пробел то, сколько раз оно встретилось. Если таких слов несколько, вывести лексикографически первое (можно использовать оператор < для строк).
Sample Input
abc a bCd bC AbC BC BCD bcd ABC Sample Output
abc 3 with open('input.txt', 'r') as f: data = [] for line in f: data += line.strip().lower().split(' ') d = {key: data.count(key) for key in set(data)} print(*sorted(d.items(), reverse=True, key=lambda item: item[1] or item[0])[0], sep=' ') with open('input.txt') as f: text = f.read().lower().split() popular_word = max(set(text), key=text.count) print(popular_word, text.count(popular_word)) Суть в том, что text.count будет работать как замыкание и максимум выполнится на данных списка text.
Ремарка ---> решение может работать за
Имеется файл с данными по успеваемости абитуриентов. Он представляет из себя набор строк, где в каждой строке записана следующая информация:
Фамилия;Оценка_по_математике;Оценка_по_физике;Оценка_по_русскому_языку
Поля внутри строки разделены точкой с запятой, оценки — целые числа.
Напишите программу, которая считывает исходный файл с подобной структурой и для каждого абитуриента записывает его среднюю оценку по трём предметам на отдельной строке, соответствующей этому абитуриенту, в файл с ответом.
Также вычислите средние баллы по математике, физике и русскому языку по всем абитуриентам и добавьте полученные значения, разделённые пробелом, последней строкой в файл с ответом.
Sample Input:
Петров;85;92;78 Сидоров;100;88;94 Иванов;58;72;85 Sample Output:
85.0 94.0 71.666666667 81.0 84.0 85.666666667 with open('input.txt', 'r') as f: data = [] for line in f: data.append(list(map(int, line.split(';')[1:]))) print(*[sum(data[i]) / 3 for i in range(len(data))], sep='\n') print(*[sum([data[i][j] for i in range(len(data))])/len(data) for j in range(3)]) # здесь во вложенном списковом включении происходит "транспонирование" матрицы, поэтому sum корректно работает В какой-то момент в Институте биоинформатики биологи перестали понимать, что говорят информатики: они говорили каким-то странным набором звуков.
В какой-то момент один из биологов раскрыл секрет информатиков: они использовали при общении подстановочный шифр, т.е. заменяли каждый символ исходного сообщения на соответствующий ему другой символ. Биологи раздобыли ключ к шифру и теперь нуждаются в помощи:
Напишите программу, которая умеет шифровать и расшифровывать шифр подстановки. Программа принимает на вход две строки одинаковой длины, на первой строке записаны символы исходного алфавита, на второй строке — символы конечного алфавита, после чего идёт строка, которую нужно зашифровать переданным ключом, и ещё одна строка, которую нужно расшифровать.
Пусть, например, на вход программе передано:
abcd *d%# abacabadaba #*%*d*% Это значит, что символ a исходного сообщения заменяется на символ * в шифре, b заменяется на d, c — на % и d — на #. Нужно зашифровать строку abacabadaba и расшифровать строку #*%*d*% с помощью этого шифра. Получаем следующие строки, которые и передаём на вывод программы:
*d*%*d*#*d* dacabac Sample Input 1:
abcd *d%# abacabadaba #*%*d*% Sample Output 1:
*d*%*d*#*d* dacabac abceda = input() cipher = input() key = dict(zip(abceda, cipher)) to_crypt = input() print(*[key[abc] for abc in to_crypt], sep='') de_crypt = input() key = dict(zip(cipher, abceda)) print(*[key[abc] for abc in de_crypt], sep='') a, b, c, d = input(), input(), input(), input() print(''.join(b[a.index(i)] for i in c)) print(''.join(a[b.index(i)] for i in d)) Простейшая система проверки орфографии может быть основана на использовании списка известных слов. Если введённое слово не найдено в этом списке, оно помечается как "ошибка".
Попробуем написать подобную систему.
На вход программе первой строкой передаётся количество
Выведите уникальные "ошибки" в произвольном порядке. Работу производите без учёта регистра.
Sample Input:
4 champions we are Stepik 3 We are the champignons We Are The Champions Stepic Sample Output:
stepic champignons the dic = {input().lower() for i in range(int(input()))} wrd = set() for w in range(int(input())): wrd |= {i.lower() for i in input().split()} print(*wrd.difference(dic), sep="\n") n = int(input()) # dictionary book = set([input().lower().strip() for i in range(n)]) n = int(input()) # number of sentences errors = set([word for i in range(n) for word in input().lower().split(' ') if word not in book]) print(*errors, sep='\n')