Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Исправьте ошибку программе на языке Python.

Алина Яшина Ученик (135), открыт 4 недели назад
ошибка File "/tmp/sessions/5d8b38825a31ecde/main.py", line 17
access_matrix[user] = {}
^
IndentationError: expected an indented block after 'for' statement on line 16
программа
import random

# Создаем список пользователей: конкретные имена + автоматически сгенерированные пользователи
specific_users = ['Ivan', 'Sergey', 'Boris', 'Grigory']
generated_users = [f'User{i + 1}' for i in range(4)] # 4 автоматически сгенерированных пользователей
users = specific_users + generated_users
#Количество объектов (4 объекта)
objects = [f'Object{i + 1}' for i in range(4)]
#Возможные права доступа
operations = ['read', 'write', 'grant', 'record']

#Матрица доступа
access_matrix = {}

#Генерация прав доступа
for user in users:
access_matrix[user] = {}
for obj in objects:
if user == 'Sergey': # "Sergey" - администратор, имеет все права
access_matrix[user][obj] = ['read', 'write', 'grant']
else: # Случайные права для остальных пользователей
access_matrix[user][obj] = random.sample(operations, random.randint(0, 4))

#Функция идентификации пользователя
def identify_user():
user = input("Введите идентификатор пользователя: ")
if user in users:
print(f"Добро пожаловать, {user}!")
return user
else:
print("Идентификация не удалась.")
return None

#Функция отображения прав доступа в табличном виде
def show_access_rights(user):
print(f"\nПрава доступа для пользователя {user}:")
print(f"{'Объект':<10} | {'Права доступа'}")
print("-" * 30)
for obj, rights in access_matrix[user].items():
rights_str = ', '.join(rights) if rights else 'Нет доступа'
print(f"{obj:<10} | {rights_str}")
print("-" * 30)

#Главный цикл программы
while True:
user = None
while not user:
user = identify_user()
show_access_rights(user)
# Предложение продолжить или выйти
action = input("Введите 'back' для повторной идентификации или 'quit' для выхода: ").strip().lower()

if action == 'quit':
print("Сессия завершена.")
break
elif action == 'back':
print("Возвращаемся к идентификации...\n")
4 ответа
Timur T Гуру (4191) 4 недели назад
а сам?
Алина ЯшинаУченик (135) 4 недели назад
не получатся
Timur T Гуру (4191) Алина Яшина, пытайся
Rob0t135 Мыслитель (5341) 4 недели назад
после строк с for, while, if, def, else, elif и других команд с использованием двоеточий должен быть отступ в четыре пробела (нажатие tab). Ты что, удалял их?
Вот пофикшенный код:
 import random  

# Создаем список пользователей: конкретные имена + автоматически сгенерированные пользователи
specific_users = ['Ivan', 'Sergey', 'Boris', 'Grigory']
generated_users = [f'User{i + 1}' for i in range(4)] # 4 автоматически сгенерированных пользователей
users = specific_users + generated_users
#Количество объектов (4 объекта)
objects = [f'Object{i + 1}' for i in range(4)]
#Возможные права доступа
operations = ['read', 'write', 'grant', 'record']

#Матрица доступа
access_matrix = {}

#Генерация прав доступа
for user in users:
access_matrix[user] = {}
for obj in objects:
if user == 'Sergey': # "Sergey" - администратор, имеет все права
access_matrix[user][obj] = ['read', 'write', 'grant']
else: # Случайные права для остальных пользователей
access_matrix[user][obj] = random.sample(operations, random.randint(0, 4))

#Функция идентификации пользователя
def identify_user():
user = input("Введите идентификатор пользователя: ")
if user in users:
print(f"Добро пожаловать, {user}!")
return user
else:
print("Идентификация не удалась.")
return None

#Функция отображения прав доступа в табличном виде
def show_access_rights(user):
print(f"\nПрава доступа для пользователя {user}:")
print(f"{'Объект':<10} | {'Права доступа'}")
print("-" * 30)
for obj, rights in access_matrix[user].items():
rights_str = ', '.join(rights) if rights else 'Нет доступа'
print(f"{obj:<10} | {rights_str}")
print("-" * 30)

#Главный цикл программы
while True:
user = None
while not user:
user = identify_user()
show_access_rights(user)
# Предложение продолжить или выйти
action = input("Введите 'back' для повторной идентификации или 'quit' для выхода: ").strip().lower()

if action == 'quit':
print("Сессия завершена.")
break
elif action == 'back':
print("Возвращаемся к идентификации...\n")
возможно у меня могут быть ошибки, поскольку я не понял, где находится конец цикла, как и сама программа
Алина ЯшинаУченик (135) 4 недели назад
а можете вывести результат
Алексей ПинчукМудрец (16517) 4 недели назад
А почему именно четыре пробела?
Rob0t135 Мыслитель (5341) Алексей Пинчук, таковы правила питона
*(\/)@Si* Мыслитель (7187) 4 недели назад
 import random 

# Создаем список пользователей: конкретные имена + автоматически сгенерированные пользователи
specific_users = ['Ivan', 'Sergey', 'Boris', 'Grigory']
generated_users = [f'User{i + 1}' for i in range(4)] # 4 автоматически сгенерированных пользователей
users = specific_users + generated_users

# Количество объектов (4 объекта)
objects = [f'Object{i + 1}' for i in range(4)]

# Возможные права доступа
operations = ['read', 'write', 'grant', 'record']

# Матрица доступа
access_matrix = {}

# Генерация прав доступа
for user in users:
access_matrix[user] = {}
for obj in objects:
if user == 'Sergey': # "Sergey" - администратор, имеет все права
access_matrix[user][obj] = ['read', 'write', 'grant']
else: # Случайные права для остальных пользователей
access_matrix[user][obj] = random.sample(operations, random.randint(0, 4))

# Функция идентификации пользователя
def identify_user():
user = input("Введите идентификатор пользователя: ")
if user in users:
print(f"Добро пожаловать, {user}!")
return user
else:
print("Идентификация не удалась.")
return None

# Функция отображения прав доступа в табличном виде
def show_access_rights(user):
print(f"\nПрава доступа для пользователя {user}:")
print(f"{'Объект':<10} | {'Права доступа'}")
print("-" * 30)
for obj, rights in access_matrix[user].items():
rights_str = ', '.join(rights) if rights else 'Нет доступа'
print(f"{obj:<10} | {rights_str}")
print("-" * 30)

# Главный цикл программы
while True:
user = None
while not user:
user = identify_user()
show_access_rights(user)
# Предложение продолжить или выйти
action = input("Введите 'back' для повторной идентификации или 'quit' для выхода: ").strip().lower()
if action == 'quit':
print("Сессия завершена.")
break
elif action == 'back':
print("Возвращаемся к идентификации...\n")
Похожие вопросы