2012-05-08 2 views
0

Недавно я зарегистрировался на этом сайте, потому что я действительно застрял на задании, в котором мне требуется создать программу, в которой пользователь вводит месяц, и программа отображает, сколько дней в ней этот месяц. Пользователь также должен ввести год, чтобы программа могла проверить, является ли это високосным годом, если пользователь вводит месяц февраля.Справка по календарной программе (строковые переменные)

Это кодирование я придумал до сих пор:

def get_year(): 
    year = raw_input("Please enter the year: ") 
    return year 

def get_month(): 
    month = raw_input("Please enter the month: ") 
    return month 

def leap_year(year): 
    if year % 4 == 0: 
     return true 
    else: 
     return false 

def get_days(month): 
    if month == "january": 
     print "31 days" 
    elif month == "february" and leap_year == true: 
     print "29 days" 
    else: 
     print "28 days" 
    if month == "march": 
     print "31 days" 
    elif month == "april": 
     print "30 days" 
    elif month == "may": 
     print "31 days" 
    elif month == "june": 
     print "30 days" 
    elif month == "july": 
     print "31 days" 
    elif month == "august": 
     print "31 days" 
    elif month == "september": 
     print "30 days" 
    elif month == "october": 
     print "31 days" 
    elif month == "november": 
     print "30 days" 
    elif month == "december": 
     print "31 days" 
    else: 
     print 

def main(): 
    user_year = get_year() 
    user_month = get_month() 
    leap_year(user_year) 
    get_days(user_month) 

main() 

В любом случае, ясно, что есть ошибка в моей get_days функционировать его только я не уверен , как писать код так что программа знает, что пользователь вводит месяц, например январь или марш. Я предполагаю, что вход должен быть переменной, и поскольку каждый месяц является строкой, требуется переменная строка. Но я мог быть совершенно неправ.

Я очень новичок в python (ровно 2 недели с тех пор, как программирование для школьной работы), поэтому я не слишком уверен в многих особенностях программирования на питоне, поэтому, если кто-нибудь может помочь мне в правильном направлении , Это будет высоко ценится!

+1

Рассматривали ли вы с помощью питона [календарный модулем] (http://docs.python.org/library/calendar. html) из python [стандартной библиотеки] (http://docs.python.org/library/index.html)? – srgerg

+0

Вы совсем близко. Несколько советов: 'get_days' должно принимать два аргумента, потому что вам нужен месяц _and_ год (для проверки на високосный год). Кроме того, 'leap_year' - это функция, поэтому вам нужно вызвать ее и передать ей аргумент. Кроме того, ваши высказывания 'if' немного неудобны. Оглянитесь назад, чтобы убедиться, что они делают то, что вы ожидаете. И, наконец, это должны быть «True» и «False», а не «true» и «false». – senderle

+0

Кроме того, я не уверен, что ваш алгоритм определения високосного года является достаточно точным/полным. Из Википедии: «Годы, которые равномерно делятся на 100, не являются високосными годами, если они также не равномерно делятся на 400, и в этом случае они високосные годы» http://en.wikipedia.org/wiki/Leap_year – Levon

ответ

0

Вы были близки. Я сделал некоторые изменения, которые я прокомментировал. И, как указывает Раймонд Хеттингер, ваш get_days(month)полностью сломан.

def get_year(): 
    year = raw_input("Please enter the year: ") 
    return int(year) #otherwise it is a string! 

def get_month(): 
    month = raw_input("Please enter the month: ") 
    return month 

def leap_year(year): 
    if year % 4 == 0: 
     return True 
    else: 
     return False 

def get_days(month,leap_year): #leap_year must be passes to this function 
    #This checks for "january" and "february" with leap years 
    #and falls back to last option on EVERYTHING ELSE like a feb without a leap year or even a "march" 
    if month == "january": 
     print "31 days" 
    elif month == "february" and leap_year == True: 
     print "29 days" 
    else: 
     print "28 days" 

    #this is a separate block that runs AFTER the previous block 
    if month == "march": 
     print "31 days" 
    elif month == "april": 
     print "30 days" 
    elif month == "may": 
     print "31 days" 
    elif month == "june": 
     print "30 days" 
    elif month == "july": 
     print "31 days" 
    elif month == "august": 
     print "31 days" 
    elif month == "september": 
     print "30 days" 
    elif month == "october": 
     print "31 days" 
    elif month == "november": 
     print "30 days" 
    elif month == "december": 
     print "31 days" 
    else: 
     print "invalid input" #so that it doesnt fail silently when I enter 2 

def main(): 
    user_year = get_year() 
    user_month = get_month() 
    leap_status = leap_year(user_year) #store the leap_year status to a variable 
    get_days(user_month, leap_status) #and then pass it to a function 

main() 
+0

даже не думал о переменной leap_status или передаче leap_year. Большое спасибо, я получил программу для работы :) – Jertise

+0

Не забудьте ** принять ** ответы, которые вас удовлетворяют, щелкнув значок галочки слева от ответа. Вознаграждения - это сила этого сайта. Не заставляйте никого напоминать вам :-) – aitchnyu

0

В феврале был взломан if-elif. Небольшое изменение заключается в продолжении непрерывной схемы логики if-elif:

def get_days(month): 
    if month == "january": 
     print "31 days" 
    elif month == "february" and leap_year: 
     print "29 days" 
    elif month == "february" and not leap_year: 
     print "28 days" 
    elif month == "march": 
     print "31 days" 
    elif month == "april": 
     print "30 days" 
    elif month == "may": 
     print "31 days" 
    elif month == "june": 
     print "30 days" 
    elif month == "july": 
     print "31 days" 
    elif month == "august": 
     print "31 days" 
    elif month == "september": 
     print "30 days" 
    elif month == "october": 
     print "31 days" 
    elif month == "november": 
     print "30 days" 
    elif month == "december": 
     print "31 days" 
    else: 
     print 'unknown month' 
+0

, теперь, когда я прочитал ваш комментарий, он имеет гораздо больше смысла, я действительно не могу поверить, что я так не думал об этом, но спасибо большое ! – Jertise

0

Я предлагаю вам использовать словарь, в котором встроен тип данных в python.

def get_days(year, month): 
    """ 
    take year and month ,return the days in that month. 
    """ 
    #define a dictionary and the month is key which value is days 
    daydict = dict()  
    daydict = ['january'=31, 'february'=28, 'februaryinleapyear'=29, 
             'march'=31, 'april'=30, 
             'may'=31, 'june'=30, 
             'july'=31, 'august'=31, 
             'september'=30, 'october'=31, 
             'november'=30, 'december'=31 ] 

    try: 
     if month in daydict: 
      if month == 'february' and leap_year(year):  
       print daydict[februaryinleapyear] 
      else: 
       print daydict[month] 
     else: 
      print 'The year or month you input is invalid !' 
    except: 
     print 'error!' 
0
n=int(input('enter no of days in a month= ')) 
#0=sunday 
#1=moday 
#2=tuesday 
#3=wednesday 
#4=thursday 
#5=friday 
#6=saturday 
d=int(input('enter the starting day of month= ')) 
print('sun','mon','tue','wed','thu','fri','sat',sep='\t') 
for j in range(d): 
    print (' ',end='\t') 
i=1 
while(i<=n): 
    print (i,end='\t') 
    if(i+d)%7==0: 
     print('\t') 
    i=i+1 
+1

Некоторые объяснения по поводу этого кода могут быть полезны. – Pyves

+0

его печать календаря, не принимающая дней в месяц и день начала месяца.это полезно для каждого года –

+0

мой код полезен –

0

Этот код просит входы пользователя (more simple codes)

#python calendar days in month. 
month= input ("Enter the month('January', ...,'December'): ") # ask for inputs from user 

start=input ("Enter the start day ('Monday', ..., 'Sunday'): ") 


if start== "Monday" : 
    num=1 
elif start== "Tuesday" : 
    num=0 

elif start== "Wednesday" : 
    num=-1 

elif start== "Thursday" : 
    num=-2 

elif start== "Friday" : 
    num=-3 

elif start== "Sartday" : 
    num=-4 
elif start=="Sunday": 
    num=-5 


print(month)  
print("Mo Tu We Th Fr Sa Su") #the header of the Calender 


if month== "January" or month=="March" or month=="May" or month=="July" or month=="August" or month=="October" or month=="December" : 

    #for month with 31 days 
    for num_ in range (num,num+41,7): 
     for i in range(7): 
      if num<1: 
       print (' ',end="") 
      elif num>31: 
       print("",end="") 
      else: 
       print ("{0:>2}".format(num),end="") 
       if i<6 and num<31: 
        print(" ",end="") 
      num +=1 
     print() 


elif month== "April" or month=="June" or month=="Septemmber" or month=="November": 
    #for month with 30 days  
    for num_ in range (num,num+41,7): 
     for i in range(7): 
      if num<1: 
       print (' ',end="") 
      elif num>30: 
       print("",end="") 
      else: 
       print ("{0:>2}".format(num),end="") 
       if i<6 and num<30: 
        print(" ",end="") 
      num +=1 
     print() 


elif month== "February" : 
    # february is an exception : it has 28 days 
    for num_ in range (num,num+41,7): 
     for i in range(7): 
      if num<1: 
       print (' ',end="") 
      elif num>28: 
       print("",end="") 
      else: 

       print ("{0:>2}".format(num),end="") 
       if i<6 and num<28: 
        print(" ",end="") 
      num +=1 
     print() 


else: 
    print("invalid entry") 
Смежные вопросы