Nooby 코더는 여기! 내 임무는 지정된 날짜의 요일을 인쇄하는 코드를 작성하는 것입니다. 내 코드는 잘 작동되지만 내가 올바른 형식이 아닌 아무것도 실행할 때 (을 즉, "// 2011"또는 "12/A/2011")는 나에게이 오류 줄 것이다 : 그것은 비록Python 3.2 UnboundLocalError - 요일별 날짜 변환기
line 55, in main if is_date_valid(month, day, year) == False:
UnboundLocalError: local variable 'month' referenced before assignment
을 내가 "13/2/2011"을 시도하면 정상적으로 실행됩니다. 선생님이 내가 그것에 대해 물었을 때 그 해결책을 알지 못해서 제 문제를 찾도록 도와주세요! 가 대단히 감사합니다 는 여기에 필요한 (P 무시하고 내 의견) 경우 전체 코드 당신이하지 않아도
import sys
DAYS_IN_MONTH = ('31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31')
MONTHS_IN_WORDS = ("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
DAYS_OF_WEEK = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
def get_date():
str_date = input('Enter date: ')#.strip() = method :D
parts = str_date.split('/')#pasts = ['12', '2', '2011']
length = len(parts)
if length != 3:
raise ValueError('Invalid format for date.')
for i in range(length):
parts[i] = parts[i].strip()
if len(parts[i]) == 0 or not(parts[i].isdigit()):
raise ValueError('Invalid format for date.')
return(int(parts[0]), int(parts[1]), int(parts[2]))
def is_date_valid(month, day, year): #is_date_valid = name of function
if month < 1 or month > 12 or day < 1 or year < 0:
return False
if month != 2:
return int(day) <= int(DAYS_IN_MONTH[month-1])
additional = 0
if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
additional = 1
return int(day) <= int(DAYS_IN_MONTH[1]) + int(additional)
#month, day, year = arguments of function
def date_as_string(month, day, year):
if month > 0 and month < 13:
return MONTHS_IN_WORDS[month-1] + ' ' + str(day) + ', ' + str(year)
def day_of_week(month, day, year):
if month < 3:
month += 12
year -= 1
m = month
q = day
J = year // 100
K = year % 100
h = (q + 26*(m+1)//10 + K + K//4 + J//4 - 2*J) % 7
dayweek = DAYS_OF_WEEK[h-2]
return dayweek
def main():
print('This program calculates the day of the week for any date.')
try:
(month, day, year) = get_date()
except ValueError as error:
print("ERROR:", error)
sys.exit(1)
if is_date_valid(month, day, year) == False:
print(str(month) + '/' + str(day) + '/' + str(year) + ' is an invalid date.')
print()
else:
print(date_as_string(month, day, year) + ' is a ' + day_of_week(month, day, year) + '.')
print()
#any function call that can raise an error must be put inside a try block
if __name__ == '__main__':
main()