1 Востаннє редагувалося Akucuki (25.01.2017 19:23:27)

Тема: Як замінити елемент строки?

Пишу досить цікаву програму і не можу ніяк розібратися, здавалося б, з такою дурнею... В мене є файл в який записуються всі події "сессії" і потрібно, щоб якщо користувач хоче додати до логів замітку, то аби він не міг в ній використовувати брекети([]) т.к. щоб користувач не міг додати помітку [SYSTEM] до свого допису. Сам цей модуль - це імітація командної строки, вона перевіряє яку команду ввів користувач і виконує її.

self.command = self.enter_area.get().split(' ')

І уже на стадії виконання команди я написав ось такий код(не працює!):

for i in range(len(self.command[1])):
    if self.command[1][i] == '[' or self.command[1][i] == ']':
        self.command[1][i] = ''

Цей код одразу ж викликає помилку, інтерпритатор каже, що строковий об*єкт(повинен бути список!!) не підтримує звертання до його елементів(str object does not support item assignment).

2 Востаннє редагувалося Master_Sergius (25.01.2017 19:28:50)

Re: Як замінити елемент строки?

Рядки в Python є незмінними (immutable). Тобто, читати їх можна (в тому числі і по індексу), а ось змінити (по тому ж індексу) не можна. Є методи рядка, що нібито змінюють його (наприклад, replace), але насправді вони породжують новий рядок і не змінюють вихідний рядок. Тому в даному випадку Вам потрібно обійти це іншим шляхом.

Чому б тут не зробити щось типу:

self.command[1] = self.command[1].replace('[', '')
self.command[1] = self.command[1].replace(']', '')

А можна ще і це упростити, змінивши трішки підхід.

Подякували: Akucuki, koala2

3

Re: Як замінити елемент строки?

потрібно, щоб якщо користувач хоче додати до логів замітку, то аби він не міг в ній використовувати брекети([]) т.к. щоб користувач не міг додати помітку [SYSTEM] до свого допису

Якийсь костиль. Легко щось забути і дозволити користувачу вводити брекети якимось неочевидним способом. Якщо все це лише для того, щоб не можна було додавати цю помітку, то чому б не додавати помітку [USER], наприклад, до користувацьких дописів, а [SYSTEM] не на початку рядка ігнорувати. Можливо, вам такий варіант більше підійде.

4

Re: Як замінити елемент строки?

Прихований текст

не строки, а рядка

Подякували: ping1

5

Re: Як замінити елемент строки?

quez написав:

потрібно, щоб якщо користувач хоче додати до логів замітку, то аби він не міг в ній використовувати брекети([]) т.к. щоб користувач не міг додати помітку [SYSTEM] до свого допису

Якийсь костиль. Легко щось забути і дозволити користувачу вводити брекети якимось неочевидним способом. Якщо все це лише для того, щоб не можна було додавати цю помітку, то чому б не додавати помітку [USER], наприклад, до користувацьких дописів, а [SYSTEM] не на початку рядка ігнорувати. Можливо, вам такий варіант більше підійде.

Помітка [User] сама додається, але я не хочу щоб користувач міг імітувати системне повідомлення, навіть якщо воно виглядатиме так: [Fri Jan 27 15:21:59 2017][User Guest][SYSTEM]User deleted.