2011-12-05 1 views
0
import time 
varthing = 1 
while varthing == 1: 
    time.sleep(60) 
    checker = time.strftime("%b, %d", time.localtime()) 
    if checker == "Dec, 25" : 
     print "It's Christmas" 
     raw_input("Enter anything to close\n") 
     varthing = 0 

그것은 내가 알 수있는 것으로부터 작동하지만, 이것이 장기간 작동하는지 테스트하기는 어렵다.필자는 파이썬을 처음 사용하는데 이것이 작동하는지 여부를 알 수 없다.

+3

를 해결할 방법을 방법을 해결하기 위해 저항 할 수 있습니다. –

+0

투표 다운은 무엇입니까? – zeboidlund

+1

안녕하세요.다시 게시 [질문] (http://stackoverflow.com/questions/8381192/i-have-no-idea-what-is-wrong-with-this-code)는 SO에서 유해한 것으로 간주됩니다. 더 많은 것을 포함해야 할 경우 원래 질문을 편집 할 수 있습니다. – joaquin

답변

2

나는 그것이 작동 할 것이라고 생각한다 - 당신은 크리스마스의 날이 잘못되었지만! :) 마이클이 제안했듯이 시계를 변경하거나 내일의 날짜를 사용하여 밤새도록 시험하여 테스트 할 수 있습니다.

여기에 다소 청소기 버전입니다 :

import time 
while time.strftime('%b, %d', time.localtime()) != 'Dec, 24': 
    time.sleep(60) 
print "It's Christmas" 
raw_input("Enter anything to close\n") 

또 다른 방법은 크리스마스 아침까지 초 후 바로 time.sleep() 그 금액을 계산하는 것입니다. 또는 예를 들어, 당신의 시계 시간을 바꾸고, time.sleep() 시간 반 그리고 반복하십시오 (충분히 작아지면 반쯤 멈추도록주의하십시오).

+1

거짓말, 하루 만에 그것을 축하하는 모든 영토 국가입니다. – millimoose

+0

미안 : 수입 시간 varthing = 1 == 1 varthing 동안 : time.sleep (60) 검사기 = time.strftime ("%의 B, D %의"time.localtime을()) 검사기 경우 == "12 월 25 일": 인쇄 "It 's Christmas" raw_input ("닫을 항목을 입력하십시오. \ n") varthing = 0 – user1080694

+0

죄송합니다. 실수로 죄송합니다. 댓글에 코드를 넣는 것은 실제로 작동하지 않습니다. – user1080694

1

글쎄, 개념적으로 당신의 코드는 괜찮습니다. 당신의 가장 큰 실수는 그럼에도 불구하고, 여기에 좀 더 간결한 코드를 만들기 위해 당신이 할 수있는 몇 가지가 있습니다 크리스마스 (일반적으로) 12 월 25 일이라는 것이다 :

import time 
continueLooping = True 
while continueLooping: 
    time.sleep(60) 
    dateChecker = time.strftime("%b, %d", time.localtime()) 
    if dateChecker == "Dec, 25": 
     print "It's Christmas" 
     raw_input("Enter anything to close\n") 
     continueLooping = False 

변경 :

  • varthing ->continueLooping : 변수 이름에 의도 된 목적이 반영되기를 원합니다.
  • = 1; == 1; = 0 ->= True; ; = False : 이유 때문에 부울이 존재합니다. 그들은 당신의 코드를 더 명확하고 읽기 쉽게 만듭니다. 또한 적은 코드 ( == 1 )를 써야합니다.
  • checker ->dateChecker : 귀하의 변수 이름은
  • "Dec, 24" (당신이 선 아래로 뭔가를 확인해야 그냥 넣다) 자신의 쓰임새에 대해 구체적으로해야한다 ->"Dec, 25" : 다시, 크리스마스 종종
12 월 25 일입니다

그렇지 않으면 궁극적으로 문제가되지 않습니다. raw_input 비트는 그다지 효과적이지 않지만 UX의 문제입니다.

편집 :

항상 작은 방법이 어떻게, 나는 가능한 한 간결이 시도거야으로 보는 (가독성에 큰 손실없이).

import time 
while time.strftime("%b, %d", time.localtime()) != "Dec, 25": 
    time.sleep(60) 
print "It's Christmas" 

그리고 지금 나는 CodeGolf에이를 넣어 것 같네요. 당신이 마지막으로 남아있는 분 초 현명한 카운트 다운을 가질 수 있도록

+0

예, 12 월 24 일은 실수였습니다. – user1080694

+1

이유 때문에 'break'도 존재합니다. –

+0

파이썬은 일반적으로'dateChecker' 대신'date_checker'와 같은 변수 이름을 사용합니다. – Dougal

0
>>> def isChristmas(t): 
...  return t.month == 12 and t.day == 25 
... 
>>> from datetime import datetime 
>>> datetime.today() 
datetime.datetime(2011, 12, 4, 19, 49, 48, 51455) 
>>> isChristmas(datetime.today()) 
False 
적응 수면
0
import datetime 
import time 
T = datetime.datetime(year=2011, month=12, day=25, hour=0, minute=0, second=0) 
interval = 60 
delta = T-datetime.datetime.now() 
while delta > datetime.timedelta(0): 
    print "T minus "+str(delta) 
    if delta.total_seconds() < 60: 
     time.sleep(min(1, delta.total_seconds())) 
    elif delta.total_seconds() < 60+interval: 
     time.sleep(delta.total_seconds()-60) 
    else: 
     time.sleep(interval) 
    delta = T-datetime.datetime.now() 

print str(datetime.datetime.now()) 
raw_input("XMAS!!!") 

. min()은 원하는 시점에 거의 정확하게 스크립트를 시작합니다.

나는 :) 좋아 - 나는 때로는 몇 가지 이상한 문제를 내가 정말이 있다면 ...

프로그램의 실행하는 동안 당신의 시계를 변경
관련 문제