Как передать пользовательский ввод (строку), который уже сохранен как переменная, в качестве параметра?

#python #string #variables #parameters

#python #строка #переменные #параметры

Вопрос:

 import random
import time
from sports import sports
from states import states

def get_word():
    while True:
        user_input = input('Select a category (sports or states): ')
        if user_input in ['sports', 'states']:
            return random.choice([user_input])
        else:
            print(f'{user_input} is not a valid category, try again!')
            print('n')
 

Эта функция get_word() пытается выбрать случайное слово из списка в зависимости от категории, которую выбирает пользователь. У меня возникла проблема со строкой 10, потому что переменная user_input представляет собой строку либо ‘sports’, либо ‘states’. Эти строки уже являются именами переменных для списка, импортированного из других скриптов python. Когда я вызываю random.choice(user_input) Я получаю случайную букву из строки ‘sports’ или ‘states’ в зависимости от того, что выбрал пользователь. Вместо этого я хочу случайный элемент либо из переменной sports, либо из состояний. Как мне изменить переменную user_input, которая сохраняется как строка, для вызова фактических переменных.

Комментарии:

1. пожалуйста, не вставляйте свой код в виде скриншота.

2. как мне тогда опубликовать свой код?

3. скопируйте свой код, добавьте его в виде текста

4. Смотрите meta.stackexchange.com/questions/22186 /…

5. Хорошо, спасибо, но знаете ли вы решение моего вопроса, пожалуйста?

Ответ №1:

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

 if user_input in ['sports', 'states']:
    if user_input == 'sports':
        return random.choice(sports)
    elif user_input == 'states':
        return random.choice(states)
 

Если вместо этого вы хотите иметь возможность обрабатывать произвольно большое количество категорий, вы можете использовать a dict для их организации, а затем выбрать, какую из них использовать, dict когда вам нужно:

 user_input_options = {
    'sports': sports,
    'states': states,
}

...

if user_input in user_input_options:  # this checks the keys of user_input_options, which makes it identical to ['sports', 'states'] for our purposes
    return random.choice(user_input_options[user_input])
 

Комментарии:

1. Хорошо, спасибо! И да, я в конечном итоге собираюсь добавить больше категорий, поэтому я хотел избежать операторов if.