неділя, 25 грудня 2016 р.

3.4 Файловый ввод/вывод

Недавно мы считали для каждого слова количество его вхождений в строку. Но на все слова может быть не так интересно смотреть, как, например, на наиболее часто используемые.
Напишите программу, которая считывает текст из файла (в файле может быть больше одной строки) и выводит самое частое слово в этом тексте и через пробел то, сколько раз оно встретилось. Если таких слов несколько, вывести лексикографически первое (можно использовать оператор < для строк).
Слова, написанные в разных регистрах, считаются одинаковыми.
Sample Input:
abc a bCd bC AbC BC BCD bcd ABC
Sample Output:
abc 3
You have an unlimited number of attempts.
Time limit: 5 mins
All is correct. 
import sys
import string
a =[i.strip().lower() for i in sys.stdin.readlines()] #преобразовывает входные данные в нижний регистр и выкидывает ненужные пробелы и энтеры
a = " ".join(a).split(' ')#склеивает все елементы списка (а) и роздиляет его по пробелам
print (a)
d ={}#создаем пустой словарь
for i in a:
    d[i]=a.count(i)#заполняем словарь парами строка: ее частота
print (d)
d= sorted(d.items(),key=lambda x:x[1],reverse=True)#сортировка словаря по значению в обратном порядке
print (d)
print(d[0][0],d[0][1])#в нулевом елементе находитсмя самый частый элеемент масива (а)

3.4 Файловый ввод/вывод 2 / 6

На прошлой неделе мы сжимали строки, используя кодирование повторов. Теперь нашей задачей будет восстановление исходной строки обратно.
Напишите программу, которая считывает из файла строку, соответствующую тексту, сжатому с помощью кодирования повторов, и производит обратную операцию, получая исходный текст.
Запишите полученный текст в файл и прикрепите его, как ответ на это задание.
В исходном тексте не встречаются цифры, так что код однозначно интерпретируем.
Примечание. Это первое задание типа Dataset Quiz. В таких заданиях после нажатия "Start Quiz" у вас появляется ссылка "download your dataset". Используйте эту ссылку для того, чтобы загрузить файл со входными данными к себе на компьютер. Запустите вашу программу, используя этот файл в качестве входных данных. Выходной файл, который при этом у вас получится, надо отправить в качестве ответа на эту задачу.
Sample Input:
a3b4c2e10b1
Sample Output:
aaabbbbcceeeeeeeeeeb
You have an unlimited number of attempts.
Time limit: 5 mins
You're right! 
a = input()
b = []
for i in range(len(a)):
    if a[i].lower() in 'qwertyuiopasdfghjklzxcvbnm':
        b+=a[i]
        a=a[:i]+"!"+a[i+1:]
c=a.split('!')[1:]
for i in range(len(b)):
    print(b[i]*int(c[i]), end="")

вівторок, 13 грудня 2016 р.

3.2 Словари 4 / 6

Когда Антон прочитал «Войну и мир», ему стало интересно, сколько слов и в каком количестве используется в этой книге.
Помогите Антону написать упрощённую версию такой программы, которая сможет подсчитать слова, разделённые пробелом и вывести получившуюся статистику.
Программа должна считывать одну строку со стандартного ввода и выводить для каждого уникального слова в этой строке число его повторений (без учёта регистра) в формате "слово количество" (см. пример вывода).
Порядок вывода слов может быть произвольным, каждое уникальное слово должно выводиться только один раз.
Sample Input 1:
a aa abC aa ac abc bcd a
Sample Output 1:
ac 1
a 2
abc 2
bcd 1
aa 2
Sample Input 2:
a A a
Sample Output 2:
a 3
Good news for you, correct!
1
a  = [i.lower() for i in input().split()]
2
for i in set(a):
3
    print (i,a.count(i))

3.2 Словари 2 / 6

Напишите функцию update_dictionary(d, key, value), которая принимает на вход словарь d и два числа: key и value
.
Если ключ key
есть в словаре d, то добавьте значение value в список, который хранится по этому ключу.
Если ключа key нет в словаре, то нужно добавить значение в список по ключу 2key. Если и ключа 2key нет, то нужно добавить ключ 2key в словарь и сопоставить ему список из переданного элемента [value]
.
Требуется реализовать только эту функцию, кода вне неё не должно быть.
Функция не должна вызывать внутри себя функции input и print.
Пример работы функции:
d = {}
print(update_dictionary(d, 1, -1))  # None
print(d)                            # {2: [-1]}
update_dictionary(d, 2, -2)
print(d)                            # {2: [-1, -2]}
update_dictionary(d, 1, -3)
print(d)                            # {2: [-1, -2, -3]}
All is correct.
1
# не добавляйте кода вне функции
2
def update_dictionary(d, key, value):
3
    if key in d:
4
        d[key] += [value]
5
    elif 2*key in d:
6
        d[key*2] += [value]
7
    else:
8
        d[key*2] = [value]
9
    # put your python code here
10
 
11
# не добавляйте кода вне функции

неділя, 11 грудня 2016 р.

3.1 Функции 3 / 3

Напишите функцию 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]
Функция не должна осуществлять ввод/вывод информации.
Absolutely right.
1
def modify_list(l):
2
    i = 0
3
    while i!=len(l):
4
        if l[i]%2==1:
5
            l.pop(i)
6
        else:
7
            l[i]//=2
8
            i+=1

Дополнительная

Дополнительная

Выведите таблицу размером n×n, заполненную числами от 1 до n2 по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере (здесь n=5
):
Sample Input:
5
Sample Output:
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
You are right, well done!
1
SIZE=int(input())
2
 
3
def change(matrix, step, val): 
4
    if step>=SIZE-step:
5
        return matrix
6
    
7
    for i in range(step, SIZE-step):
8
        matrix[SIZE-step-1][i]=SIZE-1-3*step+i+val
9
        matrix[i][SIZE-step-1]=3*(SIZE-1)-5*step-i+val
10
        matrix[step][i]=4*(SIZE-1)-7*step-i+val
11
        matrix[i][step]=-step+i+val
12
        
13
    return change(matrix, step+1, 4*(SIZE-1)-8*step+val)
14
        
15
 
16
matrix = [[0 for x in range(SIZE)] for y in range(SIZE)]
17
m = list(zip(*change(matrix, 0, 1))) 
18
for y in m:
19
    print (''.join(["%4d"%x for x in y]))
Code Challenge

середа, 7 грудня 2016 р.

2.6 Задачи по материалам недели 6 / 10

Напишите программу, которая считывает список чисел lst из первой строки и число x из второй строки, которая выводит все позиции, на которых встречается число x в переданном списке lst.
Позиции нумеруются с нуля, если число x не встречается в списке, вывести строку "Отсутствует" (без кавычек, с большой буквы).
Позиции должны быть выведены в одну строку, по возрастанию абсолютного значения.
Sample Input 1:
5 8 2 7 8 8 2 4
8
Sample Output 1:
1 4 5
Sample Input 2:
5 8 2 7 8 8 2 4
10
Sample Output 2:
Отсутствует
 Right.
a = [int(i) for i in input(). split()]
b = int(input())
c = ''
j = 0
for i in a:
    if i == b:
        c = c + ' ' + str(j)
    j += 1
if len(c) == 0:
    print('Отсутствует')
else:
    print(c)

вівторок, 6 грудня 2016 р.

2.5 Списки 7 / 7

Напишите программу, которая принимает на вход список чисел в одной строке и выводит на экран в одну строку значения, которые повторяются в нём более одного раза.
Для решения задачи может пригодиться метод sort списка.
Выводимые числа не должны повторяться, порядок их вывода может быть произвольным.
Sample Input 1:
4 8 0 3 4 2 0 3
Sample Output 1:
0 3 4
Sample Input 2:
10
Sample Output 2:
Sample Input 3:
1 1 2 2 3 3
Sample Output 3:
1 2 3
Sample Input 4:
1 1 1 1 1 2 2 2
Sample Output 4:
1 2
Yes!
1
a = input().split()
2
print (' '.join(sorted(set([i for i in a if a.count(i)>1]))))

субота, 3 грудня 2016 р.

2.2 Операторы break, continue 4 / 4

Напишите программу, которая считывает целые числа с консоли по одному числу в строке.
Для каждого введённого числа проверить:
если число меньше 10, то пропускаем это число;
если число больше 100, то прекращаем считывать числа;
в остальных случаях вывести это число обратно на консоль в отдельной строке.
Sample Input 1:
12
4
2
58
112
Sample Output 1:
12
58
Sample Input 2:
101
Sample Output 2:
Sample Input 3:
1
2
102
Sample Output 3:
Yes!
1
while True:
2
  a = int(input())
3
  if a < 10 and a < 100:
4
    continue
5
  elif a > 100:
6
    break
7
  print(a)
8
 

2.1 Цикл while 6 / 6

В Институте биоинформатики между информатиками и биологами устраивается соревнование. Победителям соревнования достанется большой и вкусный пирог. В команде биологов a человек, а в команде информатиков — b
человек.
Нужно заранее разрезать пирог таким образом, чтобы можно было раздать кусочки пирога любой команде, выигравшей соревнование, при этом каждому участнику этой команды должно достаться одинаковое число кусочков пирога. И так как не хочется резать пирог на слишком мелкие кусочки, нужно найти минимальное подходящее число.
Напишите программу, которая помогает найти это число.
Программа должна считывать размеры команд (два положительных целых числа a
и b, каждое число вводится на отдельной строке) и выводить наименьшее число d
, которое делится на оба этих числа без остатка.

Sample Input 1:
7
5
Sample Output 1:
35
Sample Input 2:
15
15
Sample Output 2:
15
Sample Input 3:
12
16
Sample Output 3:
48
Yes!
1
a = int(input())
2
b = int(input())
3
s = 1
4
while s%a!=0:
5
    s+=1
6
    while s%b!=0:
7
        s+=1
8
        s=s
9
print (s)