Как выполнить уникальную случайную функцию

#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 о, что в этом непонятного?