伙计们,我在输入出生日期格式为dd / mm / yyyy时遇到问题
要遵循的指示是
提示用户在下面输入出生日期。
通过将字符串切成3个切片来提取3个字段。要将日期与月份分开,您将需要首先使用find()方法找到第一个斜杠的位置。要将月份与年份分开,您将需要使用rfind()
方法来查找最后一个斜杠的位置。
我已经尝试在建立索引的同时进行字符串切片和连接,但是对于如何做到这一点,或者我什至正在这样做,都感到很困惑。也不允许使用条件语句。
birthday = input("Enter your date of birth: ",)
day = birthday.find("/")
month = birthday.find("/")
year = birthday.rfind("/")
print("Day: ",day)
print("Month: ", month)
print("Year: ", year)
预期格式为:
输入您的生日:1985年8月30日
日:30
月:8
年份:1985
答案 0 :(得分:5)
使用rfind()
是一种绕行方式。可以,但是使用
day, month, year = birthday.split("/")
如果您的讲师坚持使用find
/ rfind
方法,那么您可以按照以下方式进行操作:
day = birthday[:birthday.find("/")]
month = birthday[birthday.find("/")+1:-birthday.rfind("/")-1]
year = birthday[-birthday.rfind("/"):]
该练习的目的可能是教您如何对字符串进行切片,而不是如何编写可读的Python。
答案 1 :(得分:1)
如果您需要进一步处理日期,datetime
模块将非常有用:
from datetime import datetime
birthday = input("Enter your date of birth: ")
bday = datetime.strptime(birthday, '%d/%m/%Y')
print(f'Day: {bday.day}')
print(f'Month: {bday.month}')
print(f'Year: {bday.year}')
一个重要的优势是,这有助于防止用户输入错误的日期,例如,将32位设置为日期,将13位设置为月份值。
答案 2 :(得分:1)
从docs阅读有关find
和rfind
的信息。它们返回找到的事件的最低和最高索引。因此,您应该改为:
b = "30/8/1985"
first_sep, last_sep = b.find("/"), b.rfind("/")
day = b[:first_sep]
month = b[first_sep+1:last_sep]
year = b[last_sep+1:]
print("Day: ", day)
print("Month: ", month)
print("Year: ", year)
输出:
Day: 30
Month: 8
Year: 1985
答案 3 :(得分:0)
birthday = input("Enter your date of birth: ",)
birthday_list = birthday.split("/")
print("Day: ",birthday_list[0])
print("Month: ", birthday_list[1])
print("Year: ", birthday_list[2])
答案 4 :(得分:0)
您可以使用正则表达式。
birthday = input("Enter your date of birth: ",)
match = re.search(r'\d{4}-\d{2}-\d{2}', birthday)
date = datetime.strptime(match.group(), '%Y-%m-%d').date()
然后您可以从中获取日,月,年。 请参阅https://docs.python.org/3/library/datetime.html#date-objects
答案 5 :(得分:0)
这很有效:
import datetime
birthday = input('Enter your birthday in dd/mm/yyyy format')
day, month, year = list(map(int, birthday.split("/")))
birthdate = datetime.date(year, month, day)
print(f"Birthday is on {birthdate.strftime('%d/%m/%Y')}")