8 svar
1793 visningar
fisken_22 7 – Fd. Medlem
Postad: 14 sep 2021 16:11 Redigerad: 14 sep 2021 16:23

Hjälp med kod

Hej, jag behöver hjälp med en inlämningsuppgift som jag ej får till. Användaren ska mata in ett år, månad och datum för att kunna räkna ut vilken veckodag det är, men hänsyn till skottår eller inte. Men den loopar bara på skottårs-uträkningen, vad gör jag för fel?  Och är listorna i början verkligen nödvändiga? 

day = ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

month = ["January", "February", "March", "April", "June", "July", "August", "September", "October", "November", "December"]

maxdagar = [31,28,31,30,31,30,31,31,30,31,30,31]

year = int(input("Year: "))
while year < 1583 or year > 9999:
    print("Out of allowed range 1583 to 9999")
    year = int(input("Year: "))

month = int(input("Month: "))
while month < 1 or month > 12:
        print("Out of allowed range 1 to 12")
        month = int(input("Month: "))

day = int(input("Day: "))
if year %400 == 0 or (year % 4 == 0 and year % 100 != 0):
    while month == 2 and day < 1 or day > 29:
        print("Out of allowed range 1 to 29")
        day = int(input("Day: "))

    while month in (1, 3, 5, 7, 8, 10, 12) and day < 1 or day > 31:
        print("Out of allowed range 1 to 31")
        day = int(input("Day: "))

    while month in (4, 6, 9, 11) and day < 1 or day > 30:
        print("Out of allowed range 1 to 30")
        day = int(input("Day: "))

else:
    while month == 2 and day < 1 or day > 28:
        print("Out of allowed range 1 to 28")
        day = int(input("Day: "))
        



if month == 1 or month == 2:
        month += 12
        year -= 1

weekday =  ( day + 13*(month+1)//5 + year + year//4 - year//100 + year//400 ) % 7

if weekday == 0:
    print("It is a Saturday")

elif weekday == 1:
    print("It is a Sunday")

elif weekday == 2:
    print("It is a Monday")

elif weekday == 3:
    print("It is a Tuesday")

elif weekday == 4:
    print("It is a Wednesday")
    
elif weekday == 5:
    print("It is a Thursday")

else:
    print("It is a Friday")
Skaft 2373 – F.d. Moderator
Postad: 14 sep 2021 16:18

Du kan redigera inlägget och lägga koden i ett kodblock istället, då följer indragen med: 

Skaft 2373 – F.d. Moderator
Postad: 14 sep 2021 16:28

Jag tror du behöver lite parenteser i dina villkor: while month == 2 and (day < 1 or day > 29)

Annars tolkar den det som while (month == 2 and day < 1) or day > 29, vilket blir annorlunda.

fisken_22 7 – Fd. Medlem
Postad: 14 sep 2021 16:34

Tack!!

dif1891 1 – Fd. Medlem
Postad: 15 sep 2021 16:06

Hej! Jag har same uppgift men lyckas inte heller lösa den. Hur gick det för dig till slut? @fisken_22

fisken_22 7 – Fd. Medlem
Postad: 15 sep 2021 17:41

Ja det löste sig. Ändra parenteserna och lägg till raderna nedan under else: också! 

    while month in (1, 3, 5, 7, 8, 10, 12) and day < 1 or day > 31:
        print("Out of allowed range 1 to 31")
        day = int(input("Day: "))

    while month in (4, 6, 9, 11) and day < 1 or day > 30:
        print("Out of allowed range 1 to 30")
        day = int(input("Day: "))
datav 34
Postad: 16 sep 2021 07:30 Redigerad: 16 sep 2021 07:31

Såhär kan man lösa den också. (Om ni vill se en annan typ av lösning)
Här är förklaringen till koden: https://www.hackerearth.com/blog/developers/how-to-find-the-day-of-a-week/

def day_of_week(year, month, day):
    t = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
    year -= month < 3
    return (year + int(year/4) - int(year/100) + int(year/400) + t[month-1] + day) % 7



Lindehaven 820 – Lärare
Postad: 16 sep 2021 10:44

Som jag ser det så är förståelsen det viktigaste. Om man använder en viss algoritm eller källkod för att lösa en uppgift så måste man förstå hur den algoritmen eller källkoden fungerar. Mina elever behöver kunna förklara hur deras lösning fungerar och varför de valt att genomföra den lösningen.

Oggeking 1
Postad: 26 maj 2022 11:30

Hej! Jag håller på med denna nu, jag får problemet att koden inte verka läsa av skottårs kalkyleringen som jag har, den är exakt likadan som @fisken_22 visar. Den ger mig bara tillbaka ”Out of allowed range 1-28”, hur kommer det sig att koden inte prioriterar rätt?

 

jag bifogar koden inom kort.

 

tacksam för all hjälp jag kan få.


Tillägg: 26 maj 2022 11:37

day = ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

month = ["January", "February", "March", "April", "June", "July", "August",
         "September", "October", "November", "December"]

maximumdays = [31,29,31,30,31,30,31,31,30,31,30,31] 

year = int(input("Year: "))
while year <1583 or year >9999:
    print("Out of allowed range 1583 to 9999")
    year = (int(input("Year: ")))
    
      
month = int(input("Month: "))
while month <1 or month >12:
    print("Out of allowed range 1 to 12")
    month = int(input("Month: "))
    

day = int(input("Day: "))
if year %400 == 0 or (year % 4 == 0 and year % 100 != 0):
  while month == 2 and (day < 1 or day > 29):
   print("Out of allowed range 1 to 29")
   day = int(input("Day: "))

  while month == 2 and (day < 1 or day > 28):
        print("Out of allowed range 1 to 28")
        day = int(input("Day: "))

while month in (1, 3, 5, 7, 8, 10, 12) and day < 1 or day > 31:
        print("Out of allowed range 1 to 31")
        day = int(input("Day: "))
        
    

while month in (4, 6, 9, 11) and day < 1 or day> 30:
        print("Out of allowed range 1 to 30")
        day = int(input("Day: "))
        


else:
           

    while month in (1, 3, 5, 7, 8, 10, 12) and day < 1 or day > 31:
        print("Out of allowed range 1 to 31")
        day = int(input("Day: "))
        
    while month in (4, 6, 9, 11) and day < 1 or day > 31:
        print("Out of allowed range 1 to 30")
        day = int(input("Day: "))
        

if month == 1 or month == 2:
    month += 12
    year -= 1

weekday = (day + 13* (month+1) //5 + year + year//4 - year//100 + year//400) % 7

if weekday == 0:
    print("It is a Saturday")

elif weekday == 1:
    print("It is a Sunday")

elif weekday == 2:
    print("It is a Monday")

elif weekday == 3:
    print("It is a Tuesday")

elif weekday == 4:
    print("It is a Wednesday")

elif weekday == 5:
    print("It is a Thursday")

else:
    print("It is a Friday")
Svara Avbryt
Close