keys = a.values()
assert not len(keys) % 2, 'только для массивов четной длины'
print([[keys[i], keys[i+1]] for i in range(0, len(keys), 2)])
a = 368
for x in [100, 10, 1]:
print(a // x) # целочисленное деление
a %= x # остаток от деления
from math import log10
a = 1234567890
assert a >= 0, "только для положительных значений"
for x in range(int(log10((a // 10 * 10) or 1)), -1, -1):
x = 10 ** x
print(a // (x))
a %= x
# -*- coding: utf-8 -*-
from pprint import pprint
from datetime import datetime, timedelta
from collections import defaultdict
INTERVAL = 15
assert 0 < INTERVAL <= 60, "алгоритм работает не совсем корректно при значениях интервала больше 60"
def get_time_list(start, end, interval):
"""
Список "времен" в которые попадает звонок
"""
t = start + timedelta(seconds=(interval - ((start.second % interval) or interval))) # стартовое время в которое попадает звонок с учетом интервала
res = []
while t.time() <= end.time(): # используем .time() т.к. если сравнивать datetime можно перейти на следующий день
res.append(t.time().isoformat())
t = t + timedelta(seconds=interval)
return res
with open('calls.log', 'r') as f:
res = defaultdict(int)
for line in f.readlines():
start_time, duration = line.split()
start_time = datetime(1, 1, 1, *map(int, start_time.split(':'))) # используем datatime вместо time, потому что к time нельзя прибавить timedelta
end_time = start_time+ timedelta(seconds=int(duration))
time_list = get_time_list(start_time, end_time, INTERVAL)
for t in time_list:
res[t] += 1
pprint(res)
{'11:02:15': 1,
'11:02:30': 2,
'11:02:45': 2,
'11:03:00': 2,
'11:03:15': 3,
'11:03:30': 3,
'11:03:45': 2,
'11:04:00': 2,
'11:04:15': 2,
'11:04:30': 2,
'11:04:45': 2,
'11:05:00': 1,
'11:05:15': 1,
'11:05:30': 1,
'11:05:45': 1,
'11:06:00': 1,
'11:06:15': 1,
'11:06:30': 1}
Ball = class("Ball", { x = 0, y = 0, world = nil })
function Ball:init(x, y, world)
self.x, self.y self.world = x, y, world
end
function Ball:touch()
local counter = self.world.get('counter')
counter.increase(10)
end
def success_test(self):
a = ABC()
a.foo = 10
self.assertEqual(a.foo, 10)
with open('test.txt', 'r') as f:
print(sum(len(line.split()) for line in f.readlines()))
with open('test.txt', 'r') as f:
print(sum(map(len, map(str.split, f.readlines()))))
# печатаем уникальные слова(ваш вариант с ошибкой)
with open('test.txt', 'r') as f:
for word in set(word.strip() for word in f.read().split()):
print(word)
# выводим слова и их количество(то, что вы подразумавали)
from collections import defaultdict # словарь, для которого можно указать значения по умолчанию
with open('test.txt', 'r') as f:
words = defaultdict(int) # функция, вызывающаяся для каждого нового ключа, int() возвращает 0
for word in (word.strip() for word in f.read().split()):
words[word] += 1 # можно не проверять на наличие ключа, а сразу инкрементировать, т.к. значение по умолчанию - 0
for word, num in words.items():
print(word, '\t', num)
# db.py:
from pony.orm import *
db = Database("sqlite", ":memory:")
# order.py:
from datatime import time
from pony.orm import *
from db import db
class Order(db.Entity):
id = PrimaryKey(int, auto=True)
date = Required(date)
trnumber = Optional(str)
# people.py:
from pony.orm import *
from db import db
class People(db.Entity):
id = PrimaryKey(int, auto=True)
name = Required(str)
lastname = Required(str)
email = Required(str)
telephone = Optional(str)
# main.py
from db import db
from people import People # обязательно импортировать все модели, чтобы они определились до генерации маппинга
from order import Order
def main():
db.generate_mapping(create_tables=True)
proc_env[k] = os.path.expandvars(v).encode(sys.getfilesystemencoding())
os.path.expandvars(v.decode(sys.getfilesystemencoding())).encode(sys.getfilesystemencoding())
C:/Users/%username%/AppData/Roaming/Sublime Text 2/Packages/Default/