自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 實(shí)戰(zhàn)項(xiàng)目:結(jié)合 while 循環(huán)和 time 模塊的 15 個(gè)創(chuàng)意應(yīng)用

開(kāi)發(fā)
本文介紹了如何結(jié)合 while? 循環(huán)和 time 模塊實(shí)現(xiàn)15個(gè)創(chuàng)意應(yīng)用以及一個(gè)實(shí)戰(zhàn)案例。

Python 的 while 循環(huán)和 time 模塊是非常實(shí)用的工具,可以用來(lái)創(chuàng)建各種有趣的應(yīng)用。今天我們就來(lái)探索一下如何將這兩個(gè)工具結(jié)合起來(lái),實(shí)現(xiàn)一些創(chuàng)意十足的小項(xiàng)目。從簡(jiǎn)單的倒計(jì)時(shí)器到復(fù)雜的自動(dòng)化任務(wù),我們會(huì)一步步引導(dǎo)你完成這些項(xiàng)目。

1. 倒計(jì)時(shí)器

首先,我們來(lái)做一個(gè)簡(jiǎn)單的倒計(jì)時(shí)器。這個(gè)項(xiàng)目會(huì)從用戶輸入的時(shí)間開(kāi)始倒數(shù),直到時(shí)間結(jié)束。

import time

# 獲取用戶輸入的時(shí)間(秒)
seconds = int(input("請(qǐng)輸入倒計(jì)時(shí)的秒數(shù): "))

while seconds > 0:
    print(f"倒計(jì)時(shí): {seconds} 秒")
    time.sleep(1)  # 暫停1秒
    seconds -= 1

print("時(shí)間到!")

解釋:

  • input() 函數(shù)獲取用戶輸入的時(shí)間。
  • while 循環(huán)在 seconds 大于 0 時(shí)繼續(xù)執(zhí)行。
  • time.sleep(1) 讓程序暫停1秒。
  • 每次循環(huán)后,seconds 減少1,直到為0。

2. 進(jìn)度條

接下來(lái),我們做一個(gè)進(jìn)度條,顯示任務(wù)的完成進(jìn)度。

import time

total_steps = 100
step = 0

while step <= total_steps:
    percent = (step / total_steps) * 100
    bar = ('=' * int(percent / 2)).ljust(50)
    print(f"[{bar}] {percent:.2f}%", end='\r')
    time.sleep(0.1)  # 模擬任務(wù)處理時(shí)間
    step += 1

print("\n任務(wù)完成!")

解釋:

  • total_steps 定義總步數(shù)。
  • while 循環(huán)在 step 小于等于 total_steps 時(shí)繼續(xù)執(zhí)行。
  • percent 計(jì)算當(dāng)前進(jìn)度的百分比。
  • bar 創(chuàng)建進(jìn)度條字符串。
  • end='\r' 讓輸出在同一行更新。
  • time.sleep(0.1) 模擬任務(wù)處理時(shí)間。

3. 簡(jiǎn)易鬧鐘

我們可以用 while 循環(huán)和 time 模塊制作一個(gè)簡(jiǎn)易鬧鐘。

import time

# 獲取用戶輸入的鬧鐘時(shí)間(格式:HH:MM)
alarm_time = input("請(qǐng)輸入鬧鐘時(shí)間 (HH:MM): ")
current_time = time.strftime("%H:%M")

while current_time != alarm_time:
    current_time = time.strftime("%H:%M")
    time.sleep(1)

print("鬧鐘響了!")

解釋:

  • input() 獲取用戶輸入的鬧鐘時(shí)間。
  • time.strftime("%H:%M") 獲取當(dāng)前時(shí)間。
  • while 循環(huán)在當(dāng)前時(shí)間不等于鬧鐘時(shí)間時(shí)繼續(xù)執(zhí)行。
  • time.sleep(1) 每秒檢查一次時(shí)間。

4. 自動(dòng)刷新網(wǎng)頁(yè)

如果你需要定期刷新某個(gè)網(wǎng)頁(yè),可以用 selenium 庫(kù)結(jié)合 while 循環(huán)和 time 模塊來(lái)實(shí)現(xiàn)。

from selenium import webdriver
import time

# 啟動(dòng)瀏覽器
driver = webdriver.Chrome()

url = "https://www.example.com"
refresh_interval = 60  # 刷新間隔(秒)

while True:
    driver.get(url)
    print("頁(yè)面已刷新")
    time.sleep(refresh_interval)

解釋:

  • webdriver.Chrome() 啟動(dòng) Chrome 瀏覽器。
  • driver.get(url) 打開(kāi)指定的網(wǎng)頁(yè)。
  • while True 無(wú)限循環(huán)。
  • time.sleep(refresh_interval) 每隔一段時(shí)間刷新一次頁(yè)面。

5. 數(shù)據(jù)采集

使用 requests 庫(kù)和 while 循環(huán),可以定期從某個(gè)網(wǎng)站抓取數(shù)據(jù)。

import requests
import time

url = "https://api.example.com/data"
interval = 30  # 抓取間隔(秒)

while True:
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        print(data)
    else:
        print("請(qǐng)求失敗")
    time.sleep(interval)

解釋:

  • requests.get(url) 發(fā)送 HTTP GET 請(qǐng)求。
  • response.status_code 檢查響應(yīng)狀態(tài)碼。
  • response.json() 解析 JSON 格式的數(shù)據(jù)。
  • time.sleep(interval) 每隔一段時(shí)間抓取一次數(shù)據(jù)。

6. 自動(dòng)發(fā)送郵件

使用 smtplib 和 email 庫(kù),結(jié)合 while 循環(huán)和 time 模塊,可以定期發(fā)送郵件。

import smtplib
from email.mime.text import MIMEText
import time

sender = 'your_email@example.com'
receiver = 'receiver_email@example.com'
password = 'your_password'
subject = '定期郵件'
body = '這是一封定期發(fā)送的郵件。'

msg = MIMEText(body)
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subject

server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender, password)

send_interval = 3600  # 發(fā)送間隔(秒)

while True:
    server.sendmail(sender, receiver, msg.as_string())
    print("郵件已發(fā)送")
    time.sleep(send_interval)

解釋:

  • MIMEText 創(chuàng)建郵件內(nèi)容。
  • smtplib.SMTP 連接 SMTP 服務(wù)器。
  • server.starttls() 啟用 TLS 加密。
  • server.login() 登錄郵箱。
  • server.sendmail() 發(fā)送郵件。
  • time.sleep(send_interval) 每隔一段時(shí)間發(fā)送一次郵件。

7. 自動(dòng)備份文件

可以定期備份文件,確保數(shù)據(jù)安全。

import shutil
import time
import os

source_file = 'path/to/source/file.txt'
backup_dir = 'path/to/backup/directory'
backup_interval = 3600  # 備份間隔(秒)

if not os.path.exists(backup_dir):
    os.makedirs(backup_dir)

while True:
    backup_file = os.path.join(backup_dir, f"backup_{int(time.time())}.txt")
    shutil.copy(source_file, backup_file)
    print(f"文件已備份到 {backup_file}")
    time.sleep(backup_interval)

解釋:

  • shutil.copy() 復(fù)制文件。
  • os.path.join() 拼接備份文件路徑。
  • os.makedirs() 創(chuàng)建備份目錄。
  • time.time() 獲取當(dāng)前時(shí)間戳。
  • time.sleep(backup_interval) 每隔一段時(shí)間備份一次文件。

8. 實(shí)時(shí)監(jiān)控系統(tǒng)資源

使用 psutil 庫(kù),可以實(shí)時(shí)監(jiān)控系統(tǒng)的 CPU 和內(nèi)存使用情況。

import psutil
import time

check_interval = 5  # 監(jiān)控間隔(秒)

while True:
    cpu_usage = psutil.cpu_percent(interval=1)
    memory_usage = psutil.virtual_memory().percent
    print(f"CPU 使用率: {cpu_usage}%")
    print(f"內(nèi)存使用率: {memory_usage}%")
    time.sleep(check_interval)

解釋:

  • psutil.cpu_percent(interval=1) 獲取 CPU 使用率。
  • psutil.virtual_memory().percent 獲取內(nèi)存使用率。
  • time.sleep(check_interval) 每隔一段時(shí)間檢查一次系統(tǒng)資源。

9. 自動(dòng)下載文件

可以定期從某個(gè) URL 下載文件。

import requests
import time
import os

url = "https://example.com/file.zip"
download_dir = 'path/to/download/directory'
download_interval = 3600  # 下載間隔(秒)

if not os.path.exists(download_dir):
    os.makedirs(download_dir)

while True:
    file_name = os.path.join(download_dir, f"file_{int(time.time())}.zip")
    response = requests.get(url)
    if response.status_code == 200:
        with open(file_name, 'wb') as file:
            file.write(response.content)
        print(f"文件已下載到 {file_name}")
    else:
        print("下載失敗")
    time.sleep(download_interval)

解釋:

  • requests.get(url) 發(fā)送 HTTP GET 請(qǐng)求。
  • response.content 獲取文件內(nèi)容。
  • with open(file_name, 'wb') as file 寫(xiě)入文件。
  • time.sleep(download_interval) 每隔一段時(shí)間下載一次文件。

10. 自動(dòng)重啟服務(wù)

如果某個(gè)服務(wù)掛了,可以自動(dòng)重啟它。

import subprocess
import time

service_name = 'your_service'
check_interval = 60  # 檢查間隔(秒)

while True:
    result = subprocess.run(['systemctl', 'is-active', service_name], capture_output=True, text=True)
    if 'inactive' in result.stdout:
        subprocess.run(['systemctl', 'start', service_name])
        print(f"{service_name} 已重啟")
    else:
        print(f"{service_name} 正在運(yùn)行")
    time.sleep(check_interval)

解釋:

  • subprocess.run() 執(zhí)行系統(tǒng)命令。
  • capture_output=True 捕獲命令輸出。
  • text=True 以文本形式返回輸出。
  • time.sleep(check_interval) 每隔一段時(shí)間檢查一次服務(wù)狀態(tài)。

11. 自動(dòng)更新軟件

可以定期檢查并更新軟件。

import subprocess
import time

update_command = 'sudo apt update && sudo apt upgrade -y'
check_interval = 3600  # 檢查間隔(秒)

while True:
    subprocess.run(update_command, shell=True)
    print("軟件已更新")
    time.sleep(check_interval)

解釋:

  • subprocess.run(update_command, shell=True) 執(zhí)行更新命令。
  • time.sleep(check_interval) 每隔一段時(shí)間更新一次軟件。

12. 自動(dòng)清理日志文件

定期清理日志文件,防止磁盤(pán)空間被占滿。

import os
import time

log_dir = 'path/to/log/directory'
cleanup_interval = 3600  # 清理間隔(秒)

while True:
    for file_name in os.listdir(log_dir):
        file_path = os.path.join(log_dir, file_name)
        if os.path.isfile(file_path):
            os.remove(file_path)
            print(f"已刪除 {file_path}")
    time.sleep(cleanup_interval)

解釋:

  • os.listdir(log_dir) 獲取日志目錄中的文件列表。
  • os.path.join(log_dir, file_name) 拼接文件路徑。
  • os.remove(file_path) 刪除文件。
  • time.sleep(cleanup_interval) 每隔一段時(shí)間清理一次日志文件。

13. 自動(dòng)同步文件夾

可以定期同步兩個(gè)文件夾的內(nèi)容。

import shutil
import time
import os

source_dir = 'path/to/source/directory'
target_dir = 'path/to/target/directory'
sync_interval = 3600  # 同步間隔(秒)

if not os.path.exists(target_dir):
    os.makedirs(target_dir)

while True:
    for item in os.listdir(source_dir):
        source_item = os.path.join(source_dir, item)
        target_item = os.path.join(target_dir, item)
        if os.path.isfile(source_item):
            shutil.copy(source_item, target_item)
            print(f"已同步 {source_item} 到 {target_item}")
        elif os.path.isdir(source_item):
            shutil.copytree(source_item, target_item)
            print(f"已同步 {source_item} 到 {target_item}")
    time.sleep(sync_interval)

解釋:

  • shutil.copy() 復(fù)制文件。
  • shutil.copytree() 復(fù)制目錄。
  • time.sleep(sync_interval) 每隔一段時(shí)間同步一次文件夾。

14. 自動(dòng)發(fā)送短信

使用 twilio 庫(kù),可以定期發(fā)送短信。

from twilio.rest import Client
import time

account_sid = 'your_account_sid'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)

to_phone_number = '+1234567890'
from_phone_number = '+0987654321'
message_body = '這是一條定期發(fā)送的短信。'
send_interval = 3600  # 發(fā)送間隔(秒)

while True:
    message = client.messages.create(
        to=to_phone_number,
        from_=from_phone_number,
        body=message_body
    )
    print(f"短信已發(fā)送,消息ID: {message.sid}")
    time.sleep(send_interval)

解釋:

  • Client(account_sid, auth_token) 創(chuàng)建 Twilio 客戶端。
  • client.messages.create() 發(fā)送短信。
  • time.sleep(send_interval) 每隔一段時(shí)間發(fā)送一次短信。

15. 自動(dòng)記錄系統(tǒng)事件

可以定期記錄系統(tǒng)事件,方便后續(xù)分析。

import logging
import time

log_file = 'path/to/log/file.log'
log_interval = 60  # 記錄間隔(秒)

logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(message)s')

while True:
    logging.info("系統(tǒng)正常運(yùn)行")
    time.sleep(log_interval)

解釋:

  • logging.basicConfig() 配置日志記錄。
  • logging.info() 記錄日志信息。
  • time.sleep(log_interval) 每隔一段時(shí)間記錄一次系統(tǒng)事件。

實(shí)戰(zhàn)案例:自動(dòng)備份數(shù)據(jù)庫(kù)

假設(shè)你有一個(gè) MySQL 數(shù)據(jù)庫(kù),需要定期備份。我們可以結(jié)合 while 循環(huán)和 time 模塊來(lái)實(shí)現(xiàn)這個(gè)功能。

import os
import time
import subprocess

db_host = 'localhost'
db_user = 'root'
db_password = 'your_password'
db_name = 'your_database'
backup_dir = 'path/to/backup/directory'
backup_interval = 3600  # 備份間隔(秒)

if not os.path.exists(backup_dir):
    os.makedirs(backup_dir)

while True:
    timestamp = int(time.time())
    backup_file = os.path.join(backup_dir, f"{db_name}_{timestamp}.sql")
    
    # 構(gòu)建 mysqldump 命令
    dump_cmd = f"mysqldump -h {db_host} -u {db_user} -p{db_password} {db_name} > {backup_file}"
    
    # 執(zhí)行備份命令
    subprocess.run(dump_cmd, shell=True)
    
    print(f"數(shù)據(jù)庫(kù)已備份到 {backup_file}")
    time.sleep(backup_interval)

解釋:

  • os.makedirs(backup_dir) 創(chuàng)建備份目錄。
  • timestamp 獲取當(dāng)前時(shí)間戳。
  • dump_cmd 構(gòu)建 mysqldump 命令。
  • subprocess.run(dump_cmd, shell=True) 執(zhí)行備份命令。
  • time.sleep(backup_interval) 每隔一段時(shí)間備份一次數(shù)據(jù)庫(kù)。

總結(jié)

本文介紹了如何結(jié)合 while 循環(huán)和 time 模塊實(shí)現(xiàn)15個(gè)創(chuàng)意應(yīng)用,包括倒計(jì)時(shí)器、進(jìn)度條、簡(jiǎn)易鬧鐘、自動(dòng)刷新網(wǎng)頁(yè)、數(shù)據(jù)采集、自動(dòng)發(fā)送郵件、自動(dòng)備份文件、實(shí)時(shí)監(jiān)控系統(tǒng)資源、自動(dòng)下載文件、自動(dòng)重啟服務(wù)、自動(dòng)更新軟件、自動(dòng)清理日志文件、自動(dòng)同步文件夾、自動(dòng)發(fā)送短信、自動(dòng)記錄系統(tǒng)事件,以及一個(gè)實(shí)戰(zhàn)案例:自動(dòng)備份數(shù)據(jù)庫(kù)。

責(zé)任編輯:趙寧寧 來(lái)源: 小白PythonAI編程
相關(guān)推薦

2024-06-19 10:08:42

Python編程while循環(huán)

2024-12-19 16:00:00

Pythonwhile 循環(huán)

2023-12-22 08:38:02

Pythondatetimetime

2021-03-24 13:17:41

編程循環(huán)語(yǔ)句Java

2021-12-09 23:20:31

Python循環(huán)語(yǔ)句

2021-12-02 14:55:44

Python項(xiàng)目編程語(yǔ)言

2024-11-25 05:00:00

randomPython

2018-10-31 11:09:30

ARNFC

2020-12-02 08:43:00

Flink SQLHBase場(chǎng)景

2024-02-26 12:13:32

C++開(kāi)發(fā)編程

2010-01-07 15:42:57

VB.NET WhilEnd While循環(huán)

2023-04-20 13:59:01

Pythonwhile循環(huán)的

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2024-05-16 13:40:23

Python庫(kù)編程

2010-03-09 14:00:20

Python循環(huán)語(yǔ)句

2020-12-11 05:57:01

Python循環(huán)語(yǔ)句代碼

2021-06-07 06:10:22

C++While循環(huán)For 循環(huán)

2014-09-04 09:48:32

jQuery響應(yīng)式

2024-06-06 09:08:14

NumPyPython數(shù)據(jù)分析

2023-02-25 16:33:12

Luawhile
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)