我在代码中总结出三个极其相似的功能,分别针对他们的出生年月日分别输入用户。即使代码非常基础,我仍想使用最佳实践,这就是为什么它有点过大的原因。因此,现在我有一个充当模板的函数,并接受三个args dateType,typeStr和typeFormat。我正在尝试使用这些args在将使用模板创建的三个函数中命名变量,以便以后可以打印出该人的生日。我知道范围,但是我尝试将其设置为全局等,但是它没有用。我不知道我是否要创建持久性变量,或者一旦函数完成,所有变量是否都未赋值,并且如果我创建变量,我就无法弄清它们的名称,因为我尝试了所有可能性。
def makeTemplateInput(dateType, typeStr, typeFormat):
def templateInput(dateType, typeStr, typeFormat):
print('You\'re using the template function. Please input your birth {} in the format {}.\n$ '.format(dateType, typeFormat), end='')
while True:
try:
dateType = input()
typeStr = dateType
dateType = int(dateType)
if dateType > 0:
if len(typeStr) != len(typeFormat) and isinstance(dateType, int):
print('Your input doesn\'t have {} digits, please use the format {}.\n$ '.format(str(len(typeFormat)), typeFormat), end='')
print('strlen: ' + str(len(typeStr)))
continue
break
else:
print('Your input is not a positive integer!\n$ ', end='')
continue
except ValueError:
print('Your input is not a valid number, please use the format {} where {} is an integer.\n$ '.format(typeFormat, str(typeFormat[:1])), end='')
print(dateType)
def yearInput1():
makeTemplateInput('year', 'yearStr', 'YYYY')
yearInput1()
print('Your birthdate is: {}/{}/{}'.format(yearInput1.year, monthInput.monthStr, dayInput.dayStr))
我肯定是一团糟,误解了Python的基本知识,但我真的不明白出了什么问题。
一些在线课程或一些好书可以帮助解决这种困惑。我创建了一些示例代码来希望回答您的问题。谢谢。
class Calendar:
def __init__(self, day, month, year): #This can be initialised with the day/month/year
self.day = day
self.month = month
self.year = year
def displayDate(self): #This will display the dates from the object created/set
print('day:{} month:{} year:{}'.format(self.day, self.month, self.year))
def setNewDate(self, otherDay, otherMonth, otherYear): #this sets the class attributes to something else
print('This was the old values day:{} month:{} year:{}'.format(self.day, self.month, self.year))
self.day = otherDay
self.month = otherMonth
self.year = otherYear
print('The new values are day:{} month:{} year:{}'.format(self.day, self.month, self.year))
cal = Calendar(6,11,2020)
cal.displayDate()
cal.setNewDate(3,4,2099)