for x, y, z in user:
не правильно. user
содержит словарь. Пытаясь посредством for
итерировать user
, вы итерируете ключи этого словаря - по одному. Но пытаетесь положить каждый один ключ в три переменных x, y, z
разом.me = {"name":"Zhenya", "last_name":"Lap", "location":"Samara"}
nastya = {"name":"Nastya","last_name":"Dem","location":"samara"}
zlata = {"name":"zlata","last_name":"ZaB","location":"Samara"}
users = [me,nastya,zlata]
print("\nПользователи на данный момент:\n")
for user in users:
print (user) #для самоконтроля, чтобы убедиться что мы получаем три словаря
for key in user:
print(f"\n{key}: {user[key].title()}!")
import json
inp = input("input")
with open(f"info.json", 'r') as f:
prefix = json.load(f)
result = None
for key in prefix:
if prefix[key] == inp:
result = key
if result is not None:
print(f'Yes, {result}')
else:
print(f'{inp} not found')
inp
. Если их там несколько, остальные не покажет. Если не найдет, сообщит. import datetime
import itertools
class MyTimer:
def __init__(self, first_time_in_datetime, delta=10, target_time_in_datetime=None):
self.current = self.repair_first_time_type(_first_time=first_time_in_datetime)
self.target_time_in_datetime = self.repair_target_time_type(_target_time=target_time_in_datetime)
self.delta_in_minutes = delta
self.zero = self.target_time_in_datetime < self.current
def repair_first_time_type(self, _first_time):
return self._repair_time_type(_first_time)
def repair_target_time_type(self, _target_time):
if _target_time is not None:
return self._repair_time_type(time_data=_target_time)
else:
return datetime.time(23, 59)
@staticmethod
def _repair_time_type(time_data):
result = datetime.time(20)
if isinstance(time_data, datetime.time):
result = time_data
if isinstance(time_data, str) and ':' in time_data:
try:
_hour, _minute, *_ = time_data.split(':')
result = datetime.time(int(_hour), int(_minute))
except TypeError:
print('Need ISO format time. Time set to 20:00:00')
except ValueError:
print('only numbers and :. Time set to 20:00:00')
return result
def _add_time(self, tm=None):
if tm is None:
tm = self.current
fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
fulldate = fulldate + datetime.timedelta(minutes=self.delta_in_minutes)
return fulldate.time()
def add_time(self):
self.current = self._add_time()
self.zero = self.zero and self.current > self.target_time_in_datetime
@property
def next(self):
return self._add_time()
@property
def check(self):
if not self.zero:
return self.current >= self.target_time_in_datetime
else:
return self.current < self.target_time_in_datetime
def __repr__(self):
return self.current.isoformat(timespec='minutes')
def write_file_from_data(data, filename):
with open(filename, 'wt') as target_file:
target_file.write('\n'.join(data))
def make_names():
return [input(f'введите {i}:') for i in 'abcv']
def make_data(_counter):
result_data = []
while not _counter.check:
time_from, time_to = _counter, _counter.next.isoformat(timespec='minutes')
result_string = f'{time_from}-{time_to} @{next(names)}'
result_data.append(result_string)
_counter.add_time()
return result_data
if __name__ == '__main__':
names = make_names()
# names = ['aaa', 'bbb', 'ccc', 'ddd']
names = itertools.cycle(names)
result_filename = 'result.txt'
first_time = '20:00'
target_time = '00:00'
delta_in_minutes = 10
counter = MyTimer(first_time, delta_in_minutes, target_time)
write_file_from_data(data=make_data(counter), filename=result_filename)
class MyClass:
def __init__(self, i):
self.i = i
def img(self):
return self.i + 1
def pos(self):
return self.i * 2
circles = [1, 2, 3]
result = []
for i in circles:
result.append(MyClass(i))
print(result[0].img())
print(result[2].pos())
row
всегда равна длине ROW_HEADS
, это лучше проверять, иначе могут быть ошибки и сбои.ROW_HEADS = ["ID:", "Имя:", "Почта:", "Добавлен:", "Зарплата:"]
def make_string(row):
return '\n'.join([f'{key} {value}' for key, value in zip(ROW_HEADS, row)])
if __name__ == '__main__':
row = (1, 2, 3, 4, 5)
print(make_string(row))
value2
ссылается на другую переменную, объявленную в global
, а другую value2
вы объявляете в своем методе путем явного присвоения:value2 = real_name
value2
ссылалось на объект из global
, но после объявления внутри метода стало ссылаться на другой объект, и стало отдельным от глобального.class Demo:
def __init__(self):
pass
def check(self, value1, not_real, value2, real):
print(f'\t{value2} тут еще не объявили {id(value2)}, ссылается на глобальную')
if value1 == not_real:
value2 = real
print(f'\t{value2} тут уже объявили {id(value2)}, ссылается на real {id(real)}')
my_var = 2
print(f'{my_var} тут глобальная {id(my_var)}')
my_test = Demo()
my_test.check(1, 1, my_var, 3)
print(f'{my_var} тут глобальная {id(my_var)}')
return
class Demo:
def __init__(self):
pass
def check(self, value1, not_real, real):
if value1 == not_real:
return real
my_var = 2
print(my_var)
my_test = Demo()
my_var = my_test.check(1, 1, 3)
print(my_var)
class Demo:
def __init__(self):
pass
def check(self, value1, not_real, value2, real):
if value1 == not_real:
value2[0] = real
my_var = [2]
print(my_var[0])
my_test = Demo()
my_test.check(1, 1, my_var, 3)
print(my_var[0])