1
votes

Le programme sort une mauvaise sortie

Je fais ça pour un projet scolaire et j'ai besoin de savoir pourquoi la sortie continue de cracher "Estonie", même lorsque les conditions ne sont pas réunies. Aussi, pourquoi le programme met-il un "Aucun" à certains endroits? Je ne sais pas si je devrais inclure tout mon code ou juste une partie, donc je vais mettre le tout au cas où. Je suis nouveau, alors s'il vous plaît, nu avec mon idocratie ...

# 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()


0 commentaires

3 Réponses :


-1
votes

Votre problème réside dans les instructions if. Lorsque vous vérifiez la condition ou , entourez-la d'un crochet.

par exemple. répond [0] == ('froid' ou 'froid') et répond [1] == ('grand' ou 'grand') et répond [2] == ('y' ou 'Y')


1 commentaires

C'est toujours faux, mais d'une manière légèrement différente.



0
votes

Si vous le souhaitez, vous pouvez modifier vos conditions pour utiliser le mot clé "in" pour éviter toute confusion entre "et", "ou" par exemple. répond [0] dans ('cold', 'Cold') et répond [1] in ('big', 'Big') et répond [2] in ('y', 'Y')


0 commentaires

1
votes

Ouf! c'est beaucoup de code et il y a probablement de bonnes leçons sur la façon de gérer la logique alambiquée, voyons si nous ne pouvons pas simplement la faire fonctionner un peu mieux.

Tout d'abord, je vous suggère d'utiliser la compréhension de liste et le lower () pour simplifier le nombre de possibilités dans les réponses

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

alors pourquoi ne pas utiliser un seul test logique dans vos instructions if / elif, quelque chose comme

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

Il existe probablement des moyens encore plus concis et pythoniques d'écrire votre code: c'est-à-dire rechercher la bonne réponse dans une table au lieu d'utiliser six instructions "if", et gérer les erreurs si l'utilisateur met quelque chose mal dans les entrées. Bonnes choses à examiner et à apprendre. Bonne chance!


0 commentaires