[英]Changing a value to 'False' from 'True' with contradicting commands
我是python的極端入門者,正在學習基礎知識。 我一直在嘗試制作一個倒計時時鍾,可以將其設置為任何小時,分鍾和秒數。 我已經完成了全部設置,但是在所有變量都達到0之后,我似乎沒有辦法將計時器設置為“ False”而不是“ True”來停止重復。
從代碼中可以看到,我還不完全了解函數,因此我並沒有真正使用它們。 在我的代碼底部,我嘗試將計時器的值切換為“ False”,但事實證明此操作不成功/
import time
import math
import turtle
hours = int(input("How many hours? :"))
minutes = int(input("How many minutes?: "))
seconds = int(input("how many seconds?: "))
start = input("ready to start?: ")
if start is "yes":
timer == true
timer = start
while timer:
seconds = seconds - 1
print(str(hours) + " hours, " + str(minutes) + " minutes, and " + str(seconds) + " seconds")
time.sleep(1)
if seconds == 0:
minutes = minutes - 1
seconds += 60
if minutes == 0:
hours = hours - 1
minutes += 60
if hours == -1:
hours += 1
minutes = 0
if hours == 0 and seconds == 0 and minutes == 0:
timer = False
print("ALL DONE")
我希望計時器停止計時,但它變為負數分鍾和正數秒
問題是,當if seconds == 0
時循環到達時,它不檢查計時器是否應該結束,這意味着在計時器應該結束時它將始終增加額外的時間。
這是我的工作版本,但有一些簡化:
import time
hours = int(input("How many hours? :"))
minutes = int(input("How many minutes?: "))
seconds = int(input("how many seconds?: "))
while True:
seconds -= 1
if minutes == 0 and hours:
hours -= 1
minutes += 60
if seconds == 0 and minutes:
minutes -= 1
seconds += 60
if not hours and not minutes and not seconds:
print('ALL DONE')
break
print(str(hours) + " hours, " + str(minutes) + " minutes, and " + str(seconds) + " seconds")
time.sleep(1)
另一個答案中提到的問題是時間變量的操縱。 當時間以第一個減量達到0小時0分0秒時,您的第一個if
塊將其重置為0 hour -1 min 60 sec
。
當然,您可以修正所有這些變量的減量。 但是,最簡單的方法是以秒為單位找出睡眠時間:
hours = ...
minutes = ...
seconds = ...
total_sleep_time_in_sec = hours * 60 * 60 + minutes * 60 + seconds
while total_sleep_time_in_sec:
sleep(1)
total_sleep_time_in_sec -= 1
print("ALL DONE")
如果查看邏輯執行的順序,則可以使循環類似於處理循環的方式。 嘗試嵌套“ if”語句,如下所示:
while timer:
if seconds == 0:
if minutes == 0:
if hours == 0:
timer = False
print("ALL DONE")
else:
hours = hours - 1
minutes += 60
else:
minutes = minutes - 1
seconds += 60
else:
seconds = seconds - 1
print(str(hours) + " hours, " + str(minutes) + " minutes, and " + str(seconds) + " seconds")
time.sleep(1)
發生的第一件事是完整性檢查。
seconds
變量達到零,則檢查minutes
變量。 minutes
變量已達到零,請檢查hours
變量。 hours
變量為零-我們已經完成了,請將timer
設置為false並將所有內容都保持為零。 如果這三個條件都不成立,則根據需要調整小時,分鍾和秒。
有趣的是,針對seconds
和minutes
變量的else語句捕獲到,當您將其遞增回60時,該變量已從零更改,因此將按預期繼續計數。
我並不是說這是放下邏輯的最漂亮方法,我當然會建議其他方法更易於閱讀,但這與我最初嘗試的方法差不多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.