簡體   English   中英

使用矛盾的命令將值從“真”更改為“假”

[英]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

我試圖說全部完成並將其值設置為false

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並將所有內容都保持為零。

如果這三個條件都不成立,則根據需要調整小時,分鍾和秒。

有趣的是,針對secondsminutes變量的else語句捕獲到,當您將其遞增回60時,該變量已從零更改,因此將按預期繼續計數。

我並不是說這是放下邏輯的最漂亮方法,我當然會建議其他方法更易於閱讀,但這與我最初嘗試的方法差不多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM