ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Как сделать несколько рандомных символов (https://forum.antichat.xyz/showthread.php?t=1429793)

laiser 19.04.2022 21:55

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

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

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

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

p.s. Пишу на python 3.9

Andrinall 19.04.2022 22:22

Цитата:

Сообщение от 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 не на рандом букву

pomidorq 19.04.2022 22:31

Ничего кроме регулярок в голову не лезет.

laiser 20.04.2022 00:27

Цитата:

Сообщение от SOLO WARRIOR

Ничего кроме регулярок в голову не лезет.

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

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

pomidorq 20.04.2022 00:33

Цитата:

Сообщение от laiser

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

Я сам сегодня пытался разобраться, ничего не понял :))) как только эти луашники с ними работают...

ice_ice 20.04.2022 05:30

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

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

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

math.randomseed(os.time())

rr = math.random(1, 26)

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

alph[rr]

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

Andrinall 20.04.2022 10:35

Цитата:

Сообщение от 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



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





https://forum.antichat.xyz/attachmen...acc5254c82.png

laiser 20.04.2022 11:32

Цитата:

Сообщение от 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.

Andrinall 20.04.2022 12:40

Цитата:

Сообщение от 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
)
)



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

https://forum.antichat.xyz/attachmen...3d591bfc54.png

Цитата:

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


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
)





Neon3333 20.04.2022 15:11

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, он заменит все вхождения подстрок.


Время: 03:34