我看了遍布堆栈溢出,所以我真的需要帮助。我正在制作一个计划,通过询问他们的出生年份来计算一个人的年龄,确认他们的出生年份是正确的,如整数,而不是单词或任何其他无效类型的答案。然后从当前年份中减去出生年份。我在输入当前年份时遇到了麻烦,并从中减去用户输入的出生年份。
# Function Boolean is_valid_integer(String input_string)
# Declare Boolean is_valid
#
# is_valid = is input_string a valid integer?
# Return is_valid
# End Function
def is_valid_integer(input_string):
try:
val = int(input_string)
is_valid = True
except ValueError:
is_valid = False
return is_valid
# Function Integer get_year_born()
# Declare Boolean is_valid
#
# Display "What year were you born in? "
# Input input_string
# Set is_valid = is_valid_integer(input_string)
# While Not is_valid
# Display "Please only enter whole years."
# Input input_string
# is_valid = is_valid_integer(input_string)
# End While
# input_integer = int(input_string)
# Return input_integer
# End Function
def get_year_born():
input_string = input("What year were you born in? ")
is_valid = is_valid_integer(input_string)
while not is_valid:
input_string = input("Please only enter whole years. ")
is_valid = is_valid_integer(input_string)
input_integer = int(input_string)
return input_integer
# Function Integer calculate_difference()
# difference = 2017 - input_integer
# End Function
import datetime
def calculate_difference(difference):
difference = 2017 - input_integer
return difference
# Module calculate_age_year()
# Set born = get_year_born()
# Call calculate_difference()
# End Module
def calculate_difference():
print("Your age is: ", difference)
calculate_age_year()
尝试将数据时间导入我的编码后,效果不佳。我也不想计算特定的日期和/或时间,所以我删除了建议编码的那些部分,也许这与它有关?
我对这个项目的目的只是计算年数,所以如果我出生在2000年,我想从2017年开始计算这个项目,这意味着我现在已经17岁了。
我的第一个函数是使输入无效的循环,第二个函数是获取用户出生的年份,第三个函数应该是计算当前日期和用户出生日期之间的差异,以及第四个函数输出用户的实际年龄。
答案 0 :(得分:0)
要使用Python中的日期,您可以使用模块datetime
。
要验证错误,pythonic的做法是使用try...catch
将用户输入转换为日期时间。抓住可能的错误并从那里进行错误管理。
这是一个简单的例子:
import datetime
def print_age():
year = raw_input('Enter your age (YYYY/MM/DD): ')
try:
year = [int(i) for i in year.split('/')]
birth_data = datetime.date(year[0], year[1], year[2])
today = datetime.date.today()
time_diff = today - birth_data
print('Your age is: {} year and {} days'. format(
time_diff.days // 365, time_diff.days % 365))
except ValueError, KeyError:
# Do your error management here
print('Please use the format YYYY/MM/DD')
print_age()
有了这个,返回True
或False
并将函数放在循环中应该相对简单。
修改强>
这是一段代码,询问用户他的出生年份并打印出差异:
import datetime
year = None
while year is None:
try:
user_input = raw_input('Enter your date of birth (YYYY): ')
year = int(user_input)
except ValueError:
print('Your did not enter a valid year!')
print('You were born {} years ago'.format(datetime.datetime.now().year - year))
虽然输入61241但不会检查年度的有效性,但不会返回错误。
如果您愿意,可以添加一层检查年份范围的验证。