Программа выводит неверный вывод - PullRequest
1 голос
/ 01 октября 2019

Я делаю это для школьного проекта, и мне нужно знать, почему результат продолжает выплевывать «Эстония», даже если условия не соответствуют. Кроме того, почему программа помещает "None" в некоторых местах? Я не уверен, должен ли я включать весь мой код или просто часть, хотя, поэтому я помещу все это на всякий случай. Я новичок, поэтому, пожалуйста, обнажите мою идократию ...

# Purpose: Create a program that suggests a vacation spot based on user input


# Here is the Input, or answers to the questions
print('Hello! This is your Dream Vacation Spot!')
answers = [input('Do you want a "hot" or "cold" place? '),
        input('Do you want a place that has a "huge" pop or "small" pop? '),
        input('Are you planning on getting wet? "y" or "n": ')]

# Create the intro that displays what they said. 
def intro():
    for i in range(2):
        print('')
    print('Hi! Welcome to your Dream Vacation Spot!')
    print('')
    print('Listed here, are your answers:')
    print('Hot or cold place? You said ' + answers[0])
    print('Huge population, or small towny place? You said ' + answers[1])
    print('Want to get wet? You said ' + answers[2])
    for i in range(2):
        print('')

# Start using the if/ elif statements to decide places to go.
def main():
    if answers[0] == 'cold' and answers[1] == 'small' and answers[2] == 'wet' or 'Wet':
        one = 'Congrats!! You got... \n Estonia!'
        print(one)

    elif answers[0] == 'cold' or 'Cold' and answers[1] == 'big' or 'Big' and answers[2] == 'y' or 'Y':
        two = 'Congrats!! You got... \n Geirangerfjord, Norway!'
        print(two)

    elif answers[0] == 'cold' or 'Cold' and answers[1] == 'small' or 'Small' and answers[2] == 'n' or 'N':
        three = 'Congrats!! You got... \n Innsbruck, Austria!'
        print(three)

    elif answers[0] == 'cold' or 'Cold' and answers[1] == 'big' or 'Big' and answers[2] == 'n' or 'N':
        four = 'Congrats!! You got... \n Yellowknife, Canada!'
        print(four)

    elif answers[0] == 'hot' or 'Hot' and answers[1] == 'big' or 'Big' and answers[2] == 'n' or 'N':
        five = 'Congrats!! You got... \n Austin, Texas!'
        print(five)

    elif answers[0] == 'hot' or 'Hot' and answers[1] == 'small' or 'Small' and answers[2] == 'n' or 'N':
        six = 'Congrats!! You got... \n Bisbee, Arizona!'
        print(six)

    elif answers[0] == 'hot' or 'Hot' and answers[1] == 'small' or 'Small' and answers[2] == 'n' or 'N':
        seven = 'Congrats!! You got... \n Grand Junction, Colorado!'
        print(seven)

    elif answers[0] == 'hot' or 'Hot' and answers[1] == 'small' or 'Small' and answers[2] == 'y' or 'Y':
        eight = 'Congrats!! You got... \n Muskogee, Oklahoma!'
        print(eight)



def printAll():
    print(intro())
    print(main())
    for i in range(2):
        print('')
    print('Have a nice trip!!!')

printAll()

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Уф! это много кода, и, вероятно, есть несколько хороших уроков о том, как справляться с запутанной логикой, давайте посмотрим, сможем ли мы просто заставить ее работать немного лучше.

Сначала я бы предложил вам использовать списокпонимание и функция lower () для упрощения числа возможностей в ответах

answers_lowercase = [x.lower() for x in answers]

, тогда почему бы не использовать один логический тест в выражениях if / elif, например,

def main():
    if answers_lowercase == ['cold', 'small', 'wet'] :
        print('Congrats!! You got... \n Estonia!')

Возможно, есть еще более лаконичные, питонские способы написания вашего кода: то есть поиск правильного ответа из таблицы вместо использования шести операторов «if» и обработка ошибок, если пользователь вводит что-то неправильно во входные данные. Хорошие вещи, чтобы посмотреть и учиться. Удачи!

0 голосов
/ 01 октября 2019

Если вы хотите, вы можете изменить свои условия, используя ключевое слово «in», чтобы избежать путаницы между «и», «или», например. отвечает [0] в («холодный», «холодный») и отвечает [1] в («большой», «большой») и отвечает [2] в («у», «Y»)

0 голосов
/ 01 октября 2019

Ваша проблема заключается в утверждениях if. При проверке состояния or окружите его скобкой.

например. answers[0] == ('cold' or 'Cold') and answers[1] == ('big' or 'Big') and answers[2] == ('y' or 'Y')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...