HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 19.04.2022, 21:55
laiser
Участник форума
Регистрация: 21.12.2013
Сообщений: 181
С нами: 6522707

Репутация: 83
По умолчанию

Всем привет. Пользователь вводит такой текст [ b][ b][ b]FFF[c][c][c][c]

После [ b]заменяется на рандомную цифру, [c] заменяется на рандомную букву

Должно получиться такое: 934FFFgrgt

Подскажите, как можно заменить определенный текст на радомную цифру и символ, но чтобы каждый был разный

p.s. Пишу на python 3.9
 
Ответить с цитированием

  #2  
Старый 19.04.2022, 22:22
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Цитата:
Сообщение от laiser  

Всем привет. Пользователь вводит такой текст [ b][ b][ b]FFF[c][c][c][c]
После [ b]заменяется на рандомную цифру, [c] заменяется на рандомную букву

Должно получиться такое: 34FFFgrgt

Подскажите, как можно заменить определенный текст на радомную цифру и символ, но чтобы каждый был разный

Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
clock
(
)
)
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
)
:
gsub
(
"%[c%]"
,
string
.
char
(
math
.
random
(
32
,
127
)
)
print
(
text
)


Писал с телефона, если где косякнул - сорян.

upd: [c] в этом коде заменяется на рандом символ из таблицы ascii, a не на рандом букву
 
Ответить с цитированием

  #3  
Старый 19.04.2022, 22:31
pomidorq
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами: 3197792

Репутация: 83
По умолчанию

Ничего кроме регулярок в голову не лезет.
 
Ответить с цитированием

  #4  
Старый 20.04.2022, 00:27
laiser
Участник форума
Регистрация: 21.12.2013
Сообщений: 181
С нами: 6522707

Репутация: 83
По умолчанию

Цитата:
Сообщение от SOLO WARRIOR  

Ничего кроме регулярок в голову не лезет.
А можно код? В регулярках вообще не шарю, хоть раз 100 пытался разобраться...

А код выше ну уж слишком не понятный и не рабочий(пытался починить)
 
Ответить с цитированием

  #5  
Старый 20.04.2022, 00:33
pomidorq
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами: 3197792

Репутация: 83
По умолчанию

Цитата:
Сообщение от laiser  

А можно код? В регулярках вообще не шарю, хоть раз 100 пытался разобраться...
А код выше ну уж слишком не понятный и не рабочий(пытался починить)
Я сам сегодня пытался разобраться, ничего не понял )) как только эти луашники с ними работают...
 
Ответить с цитированием

  #6  
Старый 20.04.2022, 05:30
ice_ice
Познающий
Регистрация: 16.02.2021
Сообщений: 62
С нами: 2757866

Репутация: 13
По умолчанию

как вариант можено создать массив с буквами :

local alph = {'a', 'b', 'c', ... )

дальше получаешь значение:

math.randomseed(os.time())

rr = math.random(1, 26)

и юзаешь его как ключ к таблице:

alph[rr]

но думаю это по-говнокодски наверное)
 
Ответить с цитированием

  #7  
Старый 20.04.2022, 10:35
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Цитата:
Сообщение от Andrinall  

Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
clock
(
)
)
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
)
:
gsub
(
"%[c%]"
,
string
.
char
(
math
.
random
(
32
,
127
)
)
print
(
text
)


Писал с телефона, если где косякнул - сорян.

upd: [c] в этом коде заменяется на рандом символ из таблицы ascii, a не на рандом букву
Немного поправлю и дополню свой код, раз уж зашёл с пк и вижу сообщение, что он не рабочий.

Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
text
:
find
(
"[[ b]]+"
)
do
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
end
for
i
=
1
,
text
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
text
=
text
:
gsub
(
"%[c%]"
,
symbol
,
1
)
end
print
(
text
)


Цитата:
Сообщение от Спойлер  


Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
text
:
find
(
"[[ b]]+"
)
do
-- проходимся по тексту кол-во раз, сколько было найдено совпадение с паттерном
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
-- заменяем каждое совпадение на псевдослучайное число
end
for
i
=
1
,
text
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
--[[
    в, скажем так, безымянную таблицу кидаем 2 псевдослучайных числа,
    это номера символов верхнего и нижнего регистров в ASCII Table, выбирается 1 символ верхнего и 1 нижнего регистров
    далее из этих двух псевдослучайных чисел выбираем одно и переводим в символ функцией string.char()
  ]]
text
=
text
:
gsub
(
"%[c%]"
,
symbol
,
1
)
-- заменяем каждое совпадение на псевдослучайный символ ;)
end
print
(
text
)
-- выводим получившийся текст


Можно это всё сделать отдельной функцией

Lua:





Код:
function
randomCode
(
txt
)
if
not
txt
or
#
txt
==
0
then
return
""
end
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
txt
:
find
(
"[[ b]]+"
)
do
txt
=
txt
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
end
for
i
=
1
,
txt
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
txt
=
txt
:
gsub
(
"%[c%]"
,
symbol
,
1
)
end
return
txt
end


И да, код рабочий:





 
Ответить с цитированием

  #8  
Старый 20.04.2022, 11:32
laiser
Участник форума
Регистрация: 21.12.2013
Сообщений: 181
С нами: 6522707

Репутация: 83
По умолчанию

Цитата:
Сообщение от Andrinall  

Немного поправлю и дополню свой код, раз уж зашёл с пк и вижу сообщение, что он не рабочий.

Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
text
:
find
(
"[[ b]]+"
)
do
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
end
for
i
=
1
,
text
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
text
=
text
:
gsub
(
"%[c%]"
,
symbol
,
1
)
end
print
(
text
)


Цитата:
Сообщение от Спойлер  


Lua:





Код:
local
text
=
"[ b][ b][ b]FFF[c][c][c]"
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
text
:
find
(
"[[ b]]+"
)
do
-- проходимся по тексту кол-во раз, сколько было найдено совпадение с паттерном
text
=
text
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
-- заменяем каждое совпадение на псевдослучайное число
end
for
i
=
1
,
text
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
--[[
    в, скажем так, безымянную таблицу кидаем 2 псевдослучайных числа,
    это номера символов верхнего и нижнего регистров в ASCII Table, выбирается 1 символ верхнего и 1 нижнего регистров
    далее из этих двух псевдослучайных чисел выбираем одно и переводим в символ функцией string.char()
  ]]
text
=
text
:
gsub
(
"%[c%]"
,
symbol
,
1
)
-- заменяем каждое совпадение на псевдослучайный символ ;)
end
print
(
text
)
-- выводим получившийся текст


Можно это всё сделать отдельной функцией

Lua:





Код:
function
randomCode
(
txt
)
if
not
txt
or
#
txt
==
0
then
return
""
end
math
.
randomseed
(
os
.
time
(
)
)
for
i
=
1
,
txt
:
find
(
"[[ b]]+"
)
do
txt
=
txt
:
gsub
(
"%[ b%]"
,
math
.
random
(
0
,
9
)
,
1
)
end
for
i
=
1
,
txt
:
find
(
"[[c]]+"
)
do
local
symbol
=
string
.
char
(
(
{
math
.
random
(
65
,
90
)
,
math
.
random
(
97
,
122
)
}
)
[
math
.
random
(
2
)
]
)
txt
=
txt
:
gsub
(
"%[c%]"
,
symbol
,
1
)
end
return
txt
end


И да, код рабочий:
Я поставил тебе симпу за старание и скажу спасибо за помощь.

Но проблемка в том, что мой вопрос в разделе Python, и я не понимаю, почему вы кидаете код для lua.
 
Ответить с цитированием

  #9  
Старый 20.04.2022, 12:40
Andrinall
Постоянный
Регистрация: 11.07.2019
Сообщений: 702
С нами: 3601315

Репутация: 148


По умолчанию

Цитата:
Сообщение от laiser  

Я поставил тебе симпу за старание и скажу спасибо за помощь.
Но проблемка в том, что мой вопрос в разделе Python, и я не понимаю, почему вы кидаете код для lua.
Хах, мы гении походу.

Python:





Код:
import
random
import
re
import
string

text
=
"[ b][ b][ b]FFF[c][c][c]"
def
randomCode
(
txt
)
:
if
not
txt
or
len
(
txt
)
==
0
:
return
""
find_b
=
len
(
re
.
findall
(
"\[ b\]"
,
txt
)
)
find_c
=
len
(
re
.
findall
(
"\[c\]"
,
txt
)
)
for
i
in
range
(
0
,
find_b
)
:
txt
=
txt
.
replace
(
"[ b]"
,
str
(
random
.
randint
(
0
,
9
)
)
,
1
)
for
i
in
range
(
0
,
find_c
)
:
#upd: я тут случайно 1 вместо 0 поставил, поправил
rand_int
=
random
.
randint
(
1
,
len
(
string
.
ascii_letters
)
)
txt
=
txt
.
replace
(
"[c]"
,
string
.
ascii_letters
[
rand_int
-
1
:
rand_int
]
,
1
)
return
txt
print
(
randomCode
(
text
)
)


В целом тоже работает



Цитата:
Сообщение от Спойлер  


Python:





Код:
import
random
import
re
import
string
import
time
def
randomCode
(
txt
)
:
if
not
txt
or
len
(
txt
)
==
0
:
return
""
find_b
=
len
(
re
.
findall
(
"\[ b\]"
,
txt
)
)
find_c
=
len
(
re
.
findall
(
"\[c\]"
,
txt
)
)
for
i
in
range
(
0
,
find_b
)
:
txt
=
txt
.
replace
(
"[ b]"
,
str
(
random
.
randint
(
0
,
9
)
)
,
1
)
for
i
in
range
(
0
,
find_c
)
:
rand_int
=
random
.
randint
(
1
,
len
(
string
.
ascii_letters
)
)
txt
=
txt
.
replace
(
"[c]"
,
string
.
ascii_letters
[
rand_int
-
1
:
rand_int
]
,
1
)
return
txt

text
=
"[ b][ b][ b]FFF[c][c][c]"
for
i
in
range
(
0
,
24
)
:
print
(
randomCode
(
text
)
)
time
.
sleep
(
1
)


 
Ответить с цитированием

  #10  
Старый 20.04.2022, 15:11
Neon3333
Участник форума
Регистрация: 13.02.2019
Сообщений: 183
С нами: 3815624

Репутация: 83
По умолчанию

Example:





Код:
import
re
import
string
from
random
import
choice
def
replace
(
user_input
:
str
)
-
>
str
:
letters
=
''
.
join
(
choice
(
string
.
ascii_letters
)
for
_
in
range
(
3
)
)
numbers
=
''
.
join
(
choice
(
string
.
digits
)
for
_
in
range
(
3
)
)
return
f"{numbers}{user_input.replace('[ b][ b][ b]', '').replace('[c][c][c]', '')}{letters}"
def
regex_replace
(
user_input
:
str
)
-
>
str
:
for
target
in
re
.
finditer
(
r'\[ b\]'
,
user_input
)
:
user_input
=
re
.
sub
(
target
.
re
.
pattern
,
choice
(
string
.
digits
)
,
user_input
,
count
=
1
)
for
target
in
re
.
finditer
(
r'\[c\]'
,
user_input
)
:
user_input
=
re
.
sub
(
target
.
re
.
pattern
,
choice
(
string
.
ascii_letters
)
,
user_input
,
count
=
1
)
return
user_input


Постановка задачи у тебя очень мутная. Ты даешь четкий шаблон текста, при этом просишь сделать это регуляркой.

Если у тебя текст всегда соответствует шаблону [ b][ b][ b]FFF[c][c][c], тогда не имеет никакого смысла использовать регекс, просто на входе проверить, соответствие введенной строки данному шаблону, в таком случае будет уместна первая функция - replce. Если же ты не знаешь количество вхождений [c] и [ b] в строке, тогда нужно использовать только второй вариант - regex_replace, он заменит все вхождения подстрок.
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.