Как кодировать сообщение об ошибке зацикливания в приложении опроса? - PullRequest
0 голосов
/ 17 декабря 2018

Я очень плохо знаком с программированием (Python), и для своего первого проекта я делаю программу мини-опроса, которая сообщает пользователю их знак зодиака в зависимости от их дня рождения.Я хочу поместить в сообщение об ошибке зацикливания, если они вводят нецелую или недопустимую дату, то есть что-то, что говорит «неверный день рождения, пожалуйста, попробуйте снова» и повторяется снова и снова, пока они не введут что-то действительное.Проблема в том, что я не уверен, какой цикл использовать и где его поставить (в самом конце?)

Вот код программы:

print('Hello SDSA!')
print('What is your name?')
myname = input()
print('Nice to meet you, ' + myname + '!')
print('How old are you?')
myage = input()
print('Amazing. Could you tell me your birthday?' + '(Please input your birthday in mmdd format.)')
bd = input()
if int(bd) in range(321,332) or int(bd) in range(401,421):
    print("You're a " + myage + "-year-old Aries!")
    zod = 'Aries'
elif int(bd) in range(421,431) or int(bd) in range(501,522):
    print("You're a " + myage + "-year-old Taurus!")
    zod = 'Taurus'
elif int(bd) in range(522,531) or int(bd) in range(601,622):
    print("You're a " + myage + "-year-old Gemini!")
    zod = 'Gemini'
elif int(bd) in range(622,631) or int(bd) in range(701,723):
    print("You're a " + myage + "-year-old Cancer!")
    zod = 'Cancer'
elif int(bd) in range(723,731) or int(bd) in range(801,823):
    print("You're a " + myage + "-year-old Leo!")
    zod = 'Leo'
elif int(bd) in range(823,832) or int(bd) in range(901,923):
    print("You're a " + myage + "-year-old Virgo!")
    zod = 'Virgo'
elif int(bd) in range(923,931) or int(bd) in range(1001,1023):
    print("You're a " + myage + "-year-old Libra!")
    zod = 'Libra'
elif int(bd) in range(1023,1031) or int(bd) in range(1101,1122):
    print("You're a " + myage + "-year-old Scorpio!")
    zod = 'Scorpio'
elif int(bd) in range(1122,1131) or int(bd) in range(1201,1222):
    print("You're a " + myage + "-year-old Sagittarius!")
    zod = 'Sagittarius'
elif int(bd) in range(1222,1231) or int(bd) in range(101,121):
    print("You're a " + myage + "-year-old Capricorn!")
    zod = 'Capricorn'
elif int(bd) in range(121,131) or int(bd) in range(201,220):
    print("You're a " + myage + "-year-old Aquarius!")
    zod = 'Aquarius'
elif int(bd) in range(220,230) or int(bd) in range(301,321):
    print("You're a " + myage + "-year-old Pisces!")
    zod = 'Pisces'

Ответы [ 5 ]

0 голосов
/ 17 декабря 2018

Вот один из способов

print('Hello SDSA!')
print('What is your name?')
myname = input()
print('Nice to meet you, ' + myname + '!')
print('How old are you?')
myage = input()
print('Amazing. Could you tell me your birthday?',)
invalid_birthday = True
while invalid_birthday:
    invalid_birthday = False
    print('(Please input your birthday in mmdd format.)')
    bd_input = input()
    bd = int(bd_input) if bd_input.isdigit() else 0
    if bd in range(321,332) or bd in range(401,421):
        print("You're a " + myage + "-year-old Aries!")
        zod = 'Aries'
    elif bd in range(421,431) or bd in range(501,522):
        print("You're a " + myage + "-year-old Taurus!")
        zod = 'Taurus'
    elif bd in range(522,531) or bd in range(601,622):
        print("You're a " + myage + "-year-old Gemini!")
        zod = 'Gemini'
    elif bd in range(622,631) or bd in range(701,723):
        print("You're a " + myage + "-year-old Cancer!")
        zod = 'Cancer'
    elif bd in range(723,731) or bd in range(801,823):
        print("You're a " + myage + "-year-old Leo!")
        zod = 'Leo'
    elif bd in range(823,832) or bd in range(901,923):
        print("You're a " + myage + "-year-old Virgo!")
        zod = 'Virgo'
    elif bd in range(923,931) or bd in range(1001,1023):
        print("You're a " + myage + "-year-old Libra!")
        zod = 'Libra'
    elif bd in range(1023,1031) or bd in range(1101,1122):
        print("You're a " + myage + "-year-old Scorpio!")
        zod = 'Scorpio'
    elif bd in range(1122,1131) or bd in range(1201,1222):
        print("You're a " + myage + "-year-old Sagittarius!")
        zod = 'Sagittarius'
    elif bd in range(1222,1231) or bd in range(101,121):
        print("You're a " + myage + "-year-old Capricorn!")
        zod = 'Capricorn'
    elif bd in range(121,131) or bd in range(201,220):
        print("You're a " + myage + "-year-old Aquarius!")
        zod = 'Aquarius'
    elif bd in range(220,230) or bd in range(301,321):
        print("You're a " + myage + "-year-old Pisces!")
        zod = 'Pisces'
    else:
        invalid_birthday = True
        print ("Invalid birthday, please try again.")
0 голосов
/ 17 декабря 2018

Отличная работа.Попробуйте поместить свой код в while loop следующим образом:

print('Amazing. Could you tell me your birthday?' + '(Please input your birthday in mmdd format.)')   
while True:      
    bd = input()
    if int(bd) in range(321,332) or int(bd) in range(401,421):
        print("You're a " + myage + "-year-old Aries!")
        zod = 'Aries'
        break
    elif int(bd) in range(421,431) or int(bd) in range(501,522):
        print("You're a " + myage + "-year-old Taurus!")
        zod = 'Taurus'
        break
    # The rest of your code goes here
    else: 
        print("Invalid birthday, please try again")

Не забудьте поставить оператор break после правильных ответов, иначе вы застрянете в бесконечном цикле .

Веселись!

0 голосов
/ 17 декабря 2018

Поскольку, если ответ является цифрой, есть встроенная функция Python что-то здесь.isdigit (), например:

myage = input()
if myage.isdigit() == True:
    print("Its a number")
else:
    print("Its not a number")

Для даты выпуска

import datetime
while True:
    myage = input()
    try:
        datetime.datetime.strptime(myage, '%Y-%m-%d')
        ### anything to do after like checking zodiacs######
        break
    except ValueError:
        raise ValueError("Incorrect data format, should be YYYY-MM-DD")
0 голосов
/ 17 декабря 2018

Вам необходимо проверить его с помощью функции datetime strptime, которая может взять строку и сравнить ее с желаемым форматом datetime.В этом cse% m% d для двухзначного месяца и двухзначной даты (с ведущими нулями).

Вы можете создать цикл while, который будет продолжаться, пока не будет выполнено условие.В этом случае, если ввод не в правильном формате, строка valid_db завершится ошибкой и выдаст ValueError.Это исключение передается и цикл запускается снова.Если функция strptime () завершается успешно (они вводят дату так, как вы хотели), оператор break выйдет из цикла и продолжит работу.

import datetime
while True:
    try:
         bd = input('Amazing. Could you tell me your birthday?' + '(Please input your birthday in mmdd format.)')
         valid_db = datetime.datetime.strptime(bd, '%m%d')
         break
    except ValueError:
       pass
0 голосов
/ 17 декабря 2018

Вы можете поставить цикл в начале.

while True:
    print('Hello SDSA!')
    print('What is your name?')
    myname = input()
    print('Nice to meet you, ' + myname + '!')
    print('How old are you?')
    myage = input()
    print('Amazing. Could you tell me your birthday?' + '(Please input your birthday in mmdd format.)')
    bd = input()
    if int(bd) in range(321,332) or int(bd) in range(401,421):
        print("You're a " + myage + "-year-old Aries!")
        zod = 'Aries'
    # rest of your code here...

    else:
        print ('Invalid Inputs. Please try again')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...