#python
#python
Вопрос:
Я хочу создать скрипт, который вводит уникальные случайные слова, пока это мой код:
import pynput
import random
import time
from pynput import keyboard
from pynput.keyboard import Key, Controller
def hi():
keyboard = Controller()
keyboard.type('hi')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def hello():
keyboard = Controller()
keyboard.type('hello')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def world():
keyboard = Controller()
keyboard.type('world')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
Что я должен делать, чтобы каждый раз выполнять уникальную функцию?
Желаемый пример вывода:
hello
world
hi
Ответ №1:
Вам просто нужно поместить свои функции в список, а затем shuffle
их:
import random
funcs = [hi, hello, world]
random.shuffle(funcs)
for func in funcs:
func()
Если вы не хотите перетасовывать на месте, вы можете использовать sample
для создания нового списка функций:
funcs = [hi, hello, world]
for func in random.sample(funcs, k=len(funcs)):
func()
Ответ №2:
Вы можете создать функцию для этого. Вот как:
Но сначала составьте список, содержащий все имена функций.
functions = [hi, hello, world]
def unique_word(func_list):
function = random.choice(func_list)
function()
unique_word(functions)
Эта функция вызывает случайные функции каждый раз, когда вы ее вызываете.
Но если вы хотите создать случайный порядок для вывода трех функций, используйте это вместо этого.
functions = [hi, hello, world]
random.shuffle(functions)
for function in functions:
function()
Комментарии:
1.
random.choice(func_list)()
2. Да, вы тоже можете это сделать. Но мне нравится использовать переменные на всякий случай, если я захочу добавить еще немного функциональности.
3. @ppwater Да, это только одно выполнение, если вы хотите получить ожидаемый результат, вы должны заключить вызов функции внутри
for
цикла.4. @Tomerikoo Уникальность заключается в том, что каждая функция, выбранная случайным образом, уникальна и не является дублирующей функцией.
5. @Tomerikoo Я редактирую код для двух разных результатов. Один выбирает из списка уникальных функций, а другой для создания уникального текста. Проверьте отредактированный код.
Ответ №3:
Вы можете использовать random.choice()
. и for
цикл для повторения функции
так что добавьте это в свой код:
functions = [hi, hello, world]
donefunc = []
def unique_word(func_list):
global donefunc
function = random.choice(func_list)
while function in donefunc:
function = random.choice(func_list)
function()
donefunc.append(function)
for i in range(len(functions)):
unique_word(functions)
Весь код:
import pynput
import random
import time
from pynput import keyboard
from pynput.keyboard import Key, Controller
def hi():
keyboard = Controller()
keyboard.type('hi')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def hello():
keyboard = Controller()
keyboard.type('hello')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def world():
keyboard = Controller()
keyboard.type('world')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
functions = [hi, hello, world]
donefunc = []
def unique_word(func_list):
global donefunc
function = random.choice(func_list)
while function in donefunc:
function = random.choice(func_list)
function()
donefunc.append(function)
for i in range(len(functions)):
unique_word(functions)
Из комментария Tomerikoo (set):
import pynput
import random
import time
from pynput import keyboard
from pynput.keyboard import Key, Controller
def hi():
keyboard = Controller()
keyboard.type('hi')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def hello():
keyboard = Controller()
keyboard.type('hello')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
def world():
keyboard = Controller()
keyboard.type('world')
keyboard.press(Key.enter)
time.sleep(random.randint(1, 2))
functions = [hi, hello, world]
donefunc = set()
def unique_word(func_list):
global donefunc
function = random.choice(func_list)
while function in donefunc:
function = random.choice(func_list)
function()
donefunc.add(function)
for i in range(len(functions)):
unique_word(functions)
Комментарии:
1. Пока это лучший вариант, но я не хочу, чтобы он повторял одну и ту же функцию дважды
2. @Rayr О, хорошо, исправлено.
3. Большое вам спасибо, это сработало отлично, но не могли бы вы объяснить последнюю часть вашего кода? (в части «весь код»)
4. @Rayr Какая последняя часть,
append
часть илиfor
цикл? или какая-то другая часть?5. @Rayr о, что в этом непонятного?