 |
|

19.04.2022, 21:55
|
|
Участник форума
Регистрация: 21.12.2013
Сообщений: 181
С нами:
6522707
Репутация:
83
|
|
Всем привет. Пользователь вводит такой текст [ b][ b][ b]FFF[c][c][c][c]
После [ b]заменяется на рандомную цифру, [c] заменяется на рандомную букву
Должно получиться такое: 934FFFgrgt
Подскажите, как можно заменить определенный текст на радомную цифру и символ, но чтобы каждый был разный
p.s. Пишу на python 3.9
|
|
|

19.04.2022, 22:22
|
|
Постоянный
Регистрация: 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 не на рандом букву
|
|
|

19.04.2022, 22:31
|
|
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами:
3197792
Репутация:
83
|
|
Ничего кроме регулярок в голову не лезет.
|
|
|

20.04.2022, 00:27
|
|
Участник форума
Регистрация: 21.12.2013
Сообщений: 181
С нами:
6522707
Репутация:
83
|
|
Сообщение от SOLO WARRIOR
Ничего кроме регулярок в голову не лезет.
А можно код? В регулярках вообще не шарю, хоть раз 100 пытался разобраться...
А код выше ну уж слишком не понятный и не рабочий(пытался починить)
|
|
|

20.04.2022, 00:33
|
|
Участник форума
Регистрация: 17.04.2020
Сообщений: 184
С нами:
3197792
Репутация:
83
|
|
Сообщение от laiser
А можно код? В регулярках вообще не шарю, хоть раз 100 пытался разобраться...
А код выше ну уж слишком не понятный и не рабочий(пытался починить)
Я сам сегодня пытался разобраться, ничего не понял  )) как только эти луашники с ними работают...
|
|
|

20.04.2022, 05:30
|
|
Познающий
Регистрация: 16.02.2021
Сообщений: 62
С нами:
2757866
Репутация:
13
|
|
как вариант можено создать массив с буквами :
local alph = {'a', 'b', 'c', ... )
дальше получаешь значение:
math.randomseed(os.time())
rr = math.random(1, 26)
и юзаешь его как ключ к таблице:
alph[rr]
но думаю это по-говнокодски наверное)
|
|
|

20.04.2022, 10:35
|
|
Постоянный
Регистрация: 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
И да, код рабочий:

|
|
|

20.04.2022, 11:32
|
|
Участник форума
Регистрация: 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.
|
|
|

20.04.2022, 12:40
|
|
Постоянный
Регистрация: 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
)
|
|
|

20.04.2022, 15:11
|
|
Участник форума
Регистрация: 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)
|
|
|
|