Как получить функцию выбора для возврата другого результата в цикле while - PullRequest
0 голосов
/ 31 января 2019

У меня есть этот код, который отлично работает, но есть небольшая проблема.Функция первого выбора работает хорошо и возвращает случайное состояние в вопросе.И если ответ да, он работает нормально и печатает, что я хочу.Но когда ответ «нет», я бы хотел, чтобы вопрос был с другим названием штата.Но функция второго выбора в цикле while возвращает то же состояние, что и первый вопрос.Я думал, что другое использование выбора вернет другое случайное имя состояния, но, видимо, это не так.

Вот код:

from random import choice

states = {
        'AK': 'Alaska',
        'AL': 'Alabama',
        'AR': 'Arkansas',
        'AS': 'American Samoa',
        'AZ': 'Arizona',
        'CA': 'California',
        'CO': 'Colorado',
        'CT': 'Connecticut',
        'DC': 'District of Columbia',
        'DE': 'Delaware',
        'FL': 'Florida',
        'GA': 'Georgia',
        'GU': 'Guam',
        'HI': 'Hawaii',
        'IA': 'Iowa',
        'ID': 'Idaho',
        'IL': 'Illinois',
        'IN': 'Indiana',
        'KS': 'Kansas',
        'KY': 'Kentucky',
        'LA': 'Louisiana',
        'MD': 'Maryland',
        'MA': 'Massachusetts',
        'ME': 'Maine',
        'MI': 'Michigan',
        'MN': 'Minnesota',
        'MO': 'Missouri',
        'MP': 'Northern Mariana Islands',
        'MS': 'Mississippi',
        'MT': 'Montana',
        'NA': 'National',
        'NC': 'North Carolina',
        'ND': 'North Dakota',
        'NE': 'Nebraska',
        'NH': 'New Hampshire',
        'NJ': 'New Jersey',
        'NM': 'New Mexico',
        'NV': 'Nevada',
        'NY': 'New York',
        'OH': 'Ohio',
        'OK': 'Oklahoma',
        'OR': 'Oregon',
        'PA': 'Pennsylvania',
        'PR': 'Puerto Rico',
        'RI': 'Rhode Island',
        'SC': 'South Carolina',
        'SD': 'South Dakota',
        'TN': 'Tennessee',
        'TX': 'Texas',
        'UT': 'Utah',
        'VA': 'Virginia',
        'VI': 'Virgin Islands',
        'VT': 'Vermont',
        'WA': 'Washington',
        'WI': 'Wisconsin',
        'WV': 'West Virginia',
        'WY': 'Wyoming'
}

state_list = list(states.values())

choice = choice(state_list)

question = "Would you like to move to {}?: ".format(choice)

answer = input(question).strip().lower()

while answer!= "yes":

    question = "Okay. How about {}?: ".format(choice)
    answer = input(question).strip().lower()

print("Sounds good! Let's go there!")   

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Объяснение

Ваша проблема в том, что вы находите случайные данные из списка состояний

choice = choice(state_list)

, и вы рассматриваете их как функцию -> вы думаете, что всякий раз, когда вы их используете, этосгенерирует случайный выбор.Нет. Выбор - это переменная, в которой вы случайно сохранили из state_list.В вашем цикле вы в основном вызываете выбор, который является не чем иным, как сохраненной переменной.

Однако вы можете создать функцию generate_choice (), которая будет делать то, что вы хотите

import random
def generate_choice():
    return random.choice(state_list)

, так что теперь вы можетевсегда звоните

new_choice = generate_choice()

, чтобы получить новый случайный элемент из списка_состояний

Также вы совершили большую ошибку, выполнив

choice = choice(state_list)

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

Решение

...
#
#choice = choice(state_list) <-- here you destroyed your function
# instead import module like this:
import random

choice = random.choice(state_list) <--- now you are save
question = "Would you like to move to {}?: ".format(choice) 

answer = input(question).strip().lower()

while answer!= "yes":

    question = "Okay. How about {}?: ".format(random.choice(state_list)) # generate choice everytime new
    answer = input(question).strip().lower()

print("Sounds good! Let's go there!")   
0 голосов
/ 31 января 2019

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

while answer!= "yes":
    choice = choice(state_list)
    question = "Okay. How about {}?: ".format(choice)
    answer = input(question).strip().lower()

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

...