#!/bin/env python3
#-*- coding:utf8 -*-
#學Python3的第十三天
#paramiko模塊
# """pip安裝paramiko模塊
# #pip install paramiko
# """
# import paramiko
#
#
# ssh = paramiko.SSHClient() #創建SSHClient對象
# #自動接收服務器發來的祕鑰,相當於是自懂回答yes
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# ssh.connect('192.168.1.50', username='root', password='123') #登錄
# result = ssh.exec_command('id root; id csdnak') #執行命令
# #分析返回的結果,result是一個長度爲3的元組
# len(result)
#
# #result中的三項分別是輸入 輸出和錯誤的類文件對象.
# stdin, stdout, stderr = result
# out = stdout.read() #讀取輸出信息
# err = stderr.read() #讀取錯誤信息
# out.decode() #將bytes轉爲str
# err.decode()
#
# print(out)
# print(err)
#
# ssh.close() #關閉鏈接
#將上方寫成函數程序
# import paramiko
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# ssh.connect(host, username=user,port=port, password=passwd)
# stdin, stdout ,stderr = ssh.exec_command(cmd)
# out = stdout.read()
# err = stderr.read()
# if out:
# print('\033[32;1m[%s] OUT:\n%s\033[0m' % (host, out.decode()))
# if err:
# print('\033[31;1m[%s] ERROR:\n%s\033[0m' % (host, err.decode()))
#
# ssh.close()
#
# if __name__ == '__main__':
# rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')
#改良:使其能講內容寫入文件(自由發揮)
# import paramiko
# import sys
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# ssh.connect(host, username=user,port=port, password=passwd)
# stdin, stdout ,stderr = ssh.exec_command(cmd)
# out = stdout.read()
# err = stderr.read()
# alist = []
# if out:
# while True:
# with open('/tmp/query.txt','wb') as fobj:
# data = out.decode()
# if not data:
# break
# alist.append(data)
# fobj.write(alist)
# if err:
# while True:
# with open('/tmp/query.txt','wb') as fobj:
# data = err.decode()
# if not data:
# break
# alist.append(data)
# fobj.write(alist)
# ssh.close()
#
# if __name__ == '__main__':
# rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')
#優化版本
# import paramiko
# import sys
# import getpass
# import threading
# import os
#
#
# def rcmd(host,user='root',passwd=None,port=22,cmd=None):
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# ssh.connect(host, username=user,port=port, password=passwd)
# stdin, stdout ,stderr = ssh.exec_command(cmd)
# out = stdout.read()
# err = stderr.read()
# if out:
# print('\033[32;1m[%s] OUT:\n%s\033[0m' % (host, out.decode()))
# if err:
# print('\033[31;1m[%s] ERROR:\n%s\033[0m' % (host, err.decode()))
#
# ssh.close()
#
# if __name__ == '__main__':
# #rcmd('192.168.1.50', passwd='123', cmd='id csdnak;sl')
# if len(sys.argv) != 3:
# print("Usage: %s ipfile 'command" % sys.argv[0])
# exit(1)
#
# if not os.path.isfile(sys.argv[1]):
# print('No such file: ',sys.argv[1])
# exit(2)
#
# ipfile = sys.argv[1]
# cmd = sys.argv[2]
# passwd = getpass.getpass()
# with open(ipfile) as fobj:
# for line in fobj:
# ip = line.rstrip() #去除行末尾的\n
# #rcmd(ip, passwd=passwd , cmd=cmd)
# t = threading.Thread(
# target=rcmd, args=(ip,),
# kwargs={'passwd': passwd, 'cmd': cmd}
# )
# t.start() #rcmd(*args, **kwargs)
#*************郵件編程
# """
# 寫郵件: 使用email模塊
# 發郵件: 使用smtplib模塊
# """
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
#
# #準備郵件
# msg = MIMEText('這是一封Python郵件測試\n','plain','utf8') #plain普通文本郵件模式
# msg['From'] = Header('root', 'utf8')
# msg['To'] = Header('bob', 'utf8')
# msg['Subject'] = Header('py test', 'utf8')
#
# #發送郵件
# smtp = smtplib.SMTP('127.0.0.1')
# smtp.sendmail('root', ['root', 'student'], msg.as_bytes()) #bytes/string都行
# smtp.close()
#******改良:改成函數 local_mail.py
# #優化版本
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
# import getpass
#
# def send_mail(body, sender, receivers, subject, host, passwd):
# # 準備郵件
# msg = MIMEText(body, 'plain', 'utf8')
# msg['From'] = Header(sender, 'utf8')
# msg['To'] = Header(receivers[0], 'utf8')
# msg['Subject'] = Header(subject, 'utf8')
#
# # 發送郵件
# smtp = smtplib.SMTP()
# smtp.connect(host)
# #smtp.starttls() #如果服務器要求安全通信,打開此註釋
# smtp.login(sender, passwd)
# smtp.sendmail(sender, receivers, msg.as_bytes())
# smtp.close()
#
#
# if __name__ == '__main__':
# body = '這是一封來自Python的郵件測試\n'
# sender = '[email protected]'
# receivers = ['[email protected]']
# subject = 'py test'
# host = 'smtp.163.com'
# passwd = getpass.getpass()
# send_mail(body, sender, receivers, subject, host, passwd)
#***************進一步優化(自由發揮)
# from email.mime.text import MIMEText
# from email.header import Header
# import smtplib
# import getpass
#
#
# def send_mail(body, sender, receivers, subject, host, passwd):
# msg = MIMEText(body, 'plain', 'utf8')
# msg['From'] = Header(sender, 'utf8')
# msg['To'] = Header(receivers[0], 'utf8')
# msg['Subject'] = Header(subject, 'utf8')
#
# smtp = smtplib.SMTP()
# smtp.connect(host)
# # smtp.starttls() # 如果服務器要求安全通信,打開此註釋
# smtp.login(sender, passwd)
# smtp.sendmail(sender, receivers, msg.as_bytes())
# smtp.close()
# print('\033[32;1mEmail: Send successful!\033[0m')
#
#
# if __name__ == '__main__':
# prompt = """\033[32m(1) SendEmail
# (2) Exit
# 請選擇(1/2): """
# while True:
# choice = input(prompt).strip()[0]
# if choice == '1':
# try:
# sender = input('\033[32mUserName: ')
# passwd = getpass.getpass()
# subject = input('\033[32mPlease input subject: ')
# body = input('\033[32mPlease input content: ')
# receivers = [input('\033[32mAddressee: ')]
# host = 'smtp.163.com'
# send_mail(body, sender, receivers, subject, host, passwd)
# except (KeyboardInterrupt,EOFError):
# print('\033[32;1m\nBye-bye!\033[0m')
# exit(1)
# else:
# print('\033[32;1m\nBye-bye!\033[0m')
# break
#*************JSON*************
# """
# JSON(JavaScript Object Notation)是一種輕量級的數據交換格式
# JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#,
# Java,JavaScript, Perl, Python等)
# - python只要將數據類型轉成json格式,其他語言的程序接收後,還能轉成它能理解的數據類型
# """
# import json
#
# adict = {'name': 'bob', 'age': 20}
# json.dumps(adict)
# data = json.dumps(adict) #將字典轉成json字符串
# print(type(data))
# print(data)
#
# rdata = json.loads(data) #將json字符串轉換成字典
# print(type(rdata))
# print(rdata)
#************requests模塊*******
# """
# Requests是用python語言編寫的,優雅而簡單的HTTP庫
# Requests內部採用urillib3
# 常用的HTTP方法
# GET:瀏覽器中輸入網址,點擊超鏈接,表單的默認提交方式
# POST:表單明確聲明的方法,用於提交數據
# put /delete/options/head
# requests模塊爲每種方法都創建了函數
# """
# import requests
#
# url1 = 'http://www.163.com'
# r=requests.get(url1)
# r.text #r.text用於顯示字符內容
#
# url2 = 'http://www.163.com'
# #改地址是一個圖片的URL
# r2 = requests.get(url2)
# with open('/tmp/bbb.jpg','wb') as fobj:
# fobj.write(r2.content) #非字符內容用r2.content
#
# #北京的城市的代碼:101010100
# url3 = 'http://www.weather.com.cn/data/sk/101010100.html'
# r3 = requests.get(url3)
# r3.encoding = 'utf8' #修改編碼
# print(r3.json() #返回json數據
#*****查快遞
# import requests
#
# url = 'http://www.kuaidi100.com/query'
# param = {'type': 'yuantong',"postid": '4182963481428'}
# r = requests.get(url,params=param)
# print(r.json())
# """
# #瀏覽器上對應的url:
# http://www.kuaidi100.com/query?type='yuantong&postid=4182963481428'
# """
#****配置釘釘機器人(用前 吧前面全部都註釋了 包括""""""也註釋)
# import requests
# import json
# import getpass
#
# url = getpass.getpass()
# # 頭部固定的,釘釘開發者手冊上明確要求的
# headers = {'Content-Type': 'application/json;charset=utf-8'}
# # data是從釘釘開發者手冊上粘過來的
# # data = {
# # "msgtype": "text",
# # "text": {
# # "content": "天王蓋地虎。我就是我, 是不一樣的煙火@156xxxx8827"
# # },
# # "at": {
# # "atMobiles": [ # @哪些人
# # "156xxxx8827",
# # "189xxxx8325"
# # ],
# # "isAtAll": False # 是否@所有人
# # }
# # }
#
# data = {
# "msgtype": "markdown",
# "markdown": {
# "title": "杭州天氣",
# "text": "#### 杭州天氣 @156xxxx8827\n" +
# "> 9度,西北風1級,空氣良89,相對溫度73% 天王蓋地虎\n\n" +
# "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n" +
# "> ###### 10點20分發布 [天氣](http://www.sogou.com/) \n"
# },
# "at": {
# "atMobiles": [
# "156xxxx8827",
# "189xxxx8325"
# ],
# "isAtAll": False
# }
# }
#
# # 釘釘開發者手冊明確要求,使用post方法
# # 字典不能直接發送,必須轉成json字符串
# r = requests.post(url, headers=headers, data=json.dumps(data))
# print(r.json())
#********************************部署zabbix釘釘報警*************************
# import requests
# import json
#
# url = 'http://192.168.1.50/api_jsonrpc.php'
# header = {'Content-Type': 'application/json-rpc'}
#################################
# #如果獲取公共信息,可以直接發送請求,如軟件版本
# data = {
# "jsonrpc": "2.0", #zabbix採用jsonrpc協議,固定值
# "method": "apiinfo.version", #方法
# "params": [], #參數
# "id": 101 #隨意給一個數字表示作業號
# }
##################################
# #通過用戶名和密碼獲取認證令牌
# data = {
# "jsonrpc": "2.0",
# "method": "user.login",
# "params": {
# "user": "Admin",
# "password": "zabbix"
# },
# "id": 1,
# }
#####################################
#獲取所有的主機
# data = {
# "jsonrpc": "2.0",
# "method": "host.get",
# "params": {
# "output": "extend",
# "filter": { #過濾出符合條件的主機
# # "host": [
# # "Zabbix server",
# # "Linux server"
# # ]
# }
# },
# "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c", #從上個步驟獲取認證令牌
# "id": 1
# }
#######################################
#刪除主機
# data = {
# "jsonrpc": "2.0",
# "method": "host.delete",
# "params": [
# "10254", # 刪除主機id是10254的主機
# ],
# "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
# "id": 1
# }
#######################################
#獲取Linux Server組的ID
# data = {
# "jsonrpc": "2.0",
# "method": "hostgroup.get",
# "params": {
# "output": "extend",
# "filter": {
# "name": [
# "Linux servers",
# ]
# }
# },
# "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
# "id": 1
# }
#######################################
#獲取Template OS Linux的ID =>10001
# data = {
# "jsonrpc": "2.0",
# "method": "template.get",
# "params": {
# "output": "extend",
# "filter": {
# "host": [
# "Template OS Linux",
# ]
# }
# },
# "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
# "id": 1
# }
######################################
#創建名nsd1906web1的主機,他在Linux Servers組中 應用Tempate OS Linxu末班
# data = {
# "jsonrpc": "2.0",
# "method": "host.create",
# "params": {
# "host": "Linux server",
# "interfaces": [ #通過什麼方式監控
# {
# "type": 1,
# "main": 1,
# "useip": 1,
# "ip": "192.168.4.100",
# "dns": "",
# "port": "10050"
# }
# ],
# "groups": [
# {
# "groupid": "2"
# }
# ],
# "templates": [
# {
# "templateid": "10001"
# }
# ],
# "inventory_mode": 0, # 主機資產記錄
# "inventory": {
# "macaddress_a": "mei you",
# "macaddress_b": "56768"
# }
# },
# "auth": "e42fd5b516ed9dc6d5c8db2aa990eb3c",
# "id": 1
# }
###############################
#輸出內容,主要關注result即可
# r = requests.post(url, headers=header, data=json.dumps(data))
# print(r.json())
#******************************************************************************
#**************晚間練習***************
#多進程基礎
# import os
#
# print('starting...')
# os.fork() #生成子進程.後續代碼同時在父子進程中執行
# print('Hello World!')
# #***********根據fork返回值判斷是父進程還是子進程
# import os
#
# print('starting...')
#
# pid = os.fork() #返回值十個數字,對於父進程,返回值是個子進程pid,子進程是0
# if pid:
# print('In parent') #父進程執行的代碼
# else:
# print('In child') #子進程執行的代碼
#
# print('Done') #父子進程都會執行的代碼
"""
多進程編程時,要明確父子進程的工作。如:父進程只用於fork子進程;
子進程做具體的工作,如果在循環結構中,做完後要退出,否則子進程還會再產生子進程、
孫進程……子子孫孫無窮匱也,系統崩潰。
"""
# import os
#
# for i in range(5):
# pid = os.fork() #父進程的工作是生成子進程
# if not pid: #如果是子進程,工作完後,結束,不要進入循環
# print('hello')
# exit() #注視着一行執行,查看結果,分析原因
#
#
# #多進程的ping
# import subprocess
# import os
#
# def ping(host):
# rc = subprocess.call(
# 'ping -c2 %s > /dev/null' % host,
# shell=True
# )
# if rc:
# print('%s: down' % host)
# else:
# print('%s: up' % host)
#
# if __name__ == '__main__':
# ips = ('192.168.1.%s'% i for i in range(1,255))
# for ip in ips:
# pid = os.fork()
# if not pid:
# print(ip)
# exit()
#多進程的效率
# import time
#
# def calc():
# result = 0
# for i in range(1,50000001):
# result +=i
# print(result)
#
# if __name__ == '__main__':
# start = time.time()
# calc()
# calc()
# end = time.time()
# print(end - start)
# import time
# import os
# def calc():
# result = 0
# for i in range(1,50000001):
# result +=i
# print(result)
#
# if __name__ == '__main__':
# start = time.time()
# for i in range(2):
# pid = os.fork()
# if not pid:
# calc()
# exit()
# os.waitpid(-1,0) #掛起父進程,直到子進程結束接繼續向下執行
# os.waitpid(-1,0) #每個waitpid只能處理一個殭屍進程,兩個子進程需要太偶用兩次
# end = time.time()
# print(end - start)
# #殭屍進程
# import os
# import time
#
# pid = os.fork()
#
# if pid:
# print('In parent.sleeping...')
# time.sleep(60)
# print('parent done.')
# else:
# print('In child.sleeping...')
# time.sleep(10)
# print('child done') #10秒後,子進程變成了殭屍進程
#
# #watch -n1 ps a 當子進程成爲殭屍進程,顯示爲z
# #kill 試圖殺死殭屍進程,附近進程,查看結果
#解決殭屍進程問題
# import os
# import time
#
# pid = os.fork()
#
# if pid:
# print('In parent sleeping...')
# print(os.waitpid(-1,1)) #無殭屍進程可以處理,返回0
# time.sleep(20)
# print(os.waitpid(-1,1)) #處理殭屍進程,返回子進程PIP
# time.sleep(60)
# print('parent done.')
# else:
# print('In hcild.sleeping...')
# time.sleep(10)
# print('child done')
#
# # watch -n1 ps a 當子進程成爲殭屍進程時,顯示爲Z
# # kill 試圖殺死殭屍進程、父進進程,查看結果
#基於多進程的時間消息服務器
# import socket
# import os
# from time import strftime
#
# class TcpTimeServer:
# def __init__(self,host='',port=12345):
# self.addr = (host,port)
# self.serv = socket.socket()
# self.serv.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
# self.serv.bind(self.addr)
# self.serv.listen(1)
#
# def chat(self,c_sock):
# while True:
# data = c_sock.recv(1024)
# if data.strip() == b'quit':
# break
# data = '[%s]%s'% (strftime('%H:%M:%S'),data.decode('utf8'))
# c_sock.send(data.encode('utf8'))
# c_sock.close()
#
# def mainloop(self):
# while True:
# cli_sock,cli_addr = self.serv.accept()
# pid = os.fork()
# if pid:
# cli_sock.close()
# while True:
# result = os.waitpid(-1,1)[0] #waitpid會優先處理殭屍進程
# if result == 0:
# break
# else:
# self.serv.close()
# self.chat(cli_sock)
# exit()
#
# sel.serv.close()
#
#
# if __name__ == '__main__':
# s = TcpTimeServer()
# s.mainloop()
# #基於多線程的ping
# import subprocess
# import threading
#
# def ping(host):
# rc = subprocess.call(
# 'ping -c2 %s & > /dev/null' % host,
# shell=True
# )
# if rc:
# print('%s: down'% host)
# else:
# print('%s: up'% host)
#
# if __name__ == '__main__':
# ips = ['172.40.58.%s' % i for i in range(1,255)]
# for ip in ips:
# #創建線程,ping是上面定義的函數,args是傳給ping函數的參數
# t = threading.Thread(target=ping,args=(ip,))
# t.start()
#多線程的效率
# import time
# import threading
#
# def calc():
# result = 0
# for i in range(1,50000001):
# result += i
# print(result)
#
# if __name__ == '__main__':
# start = time.time()
# t1 = threading.Thread(target=calc)
# t1.start()
# t2 = threading.Thread(target=calc)
# t2.start()
# t1.join() #掛起主進程.當t1簡稱執行完後才繼續向下執行
# t2.join()
# end = time.time()
# print(end - start)
# #基於多進程的時間消息服務器
# import socket
# import threading
# from time import strftime
#
# class TcpTimeServer:
# def __init__(self, host='', port=12345):
# self.addr = (host, port)
# self.serv = socket.socket()
# self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# self.serv.bind(self.addr)
# self.serv.listen(1)
#
# def chat(self, c_sock):
# while True:
# data = c_sock.recv(1024)
# if data.strip() == b'quit':
# break
# data = '[%s] %s' % (strftime('%H:%M:%S'), data.decode('utf8'))
# c_sock.send(data.encode('utf8'))
# c_sock.close()
#
# def mainloop(self):
# while True:
# cli_sock, cli_addr = self.serv.accept()
# t = threading.Thread(target=self.chat, args=(cli_sock,))
# t.start()
#
# self.serv.close()
#
# if __name__ == '__main__':
# s = TcpTimeServer()
# s.mainloop()
#並行批量管理遠程服務器
#remote_comm.py
# import sys
# import getpass
# import paramiko
# import threading
# import os
#
# def remote_comm(host,pwd,command):
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# ssh.connect(hostname=host,username='root',password=pwd)
# stdin , stdout , stderr = ssh.exec_command(command)
# out = stdout.read()
# err = stderr.read()
# if out:
# print('[%s]OUT:\n%s' % (host,out.decode('utf8')))
# if err:
# print('[%s]ERROR:\n%s' % (host,err.decode('utf8')))
# ssh.close()
#
# if __name__ == '__main__':
# if len(sys.argv) != 3:
# print('Usage: %s ipaddr_file "command"' % sys.argv[0])
# exit(1)
# if not os.path.isfile(sys.argv[1]):
# print('No such file: ',sys.argv[1])
# exit(2)
# fname = sys.argv[1]
# command = sys.argv[2]
# pwd = getpass.getpass()
# with open(fname) as fobj:
# ips = [line.strip() for line in fobj]
#
# for ip in ips:
# t = threading.Thread(target=remote_comm,args=(ip,pwd,command))
# t.start()
#*************配置ip地址
# import sys
# import re
# from _curses import raw
#
#
# def configip(fname, ip_addr, if_ind):
# content = """TYPE=Ethernet
# BOOTPROTO=none
# NAME=eth%s
# DEVICE=eth%s
# ONBOOT=yes
# IPADDR=%s
# PREFIX=24
# """ % (if_ind, if_ind, ip_addr)
# with open(fname, 'w') as fobj:
# fobj.write(content)
#
# def check_ip(ip_addr): # 判斷IP地址是不是X.X.X.X格式
# m = re.match(r'(\d{1,3}\.){3}\d{1,3}$', ip_addr)
# if not m:
# return False
# return True
#
# def show_menu():
# prompt = """Configure IP Address:
# (0) eth0
# (1) eth1
# (2) eth2
# (3) eth3
# Your choice(0/1/2/3): """
# try:
# if_ind = raw_input(prompt).strip()[0]
# except:
# print ('Invalid input.')
# sys.exit(1)
#
# if if_ind not in '0123':
# print ('Wrong Selection. Use 0/1/2/3')
# sys.exit(2)
#
# fname = '/etc/sysconfig/network-scripts/ifcfg-eth%s' % if_ind
# ip_addr = raw_input('ip address: ').strip()
# result = check_ip(ip_addr)
# if not result:
# print ('Invalid ip address')
# sys.exit(3)
# configip(fname, ip_addr, if_ind)
# print('\033[32;1mConfigure ip address done. Please execute "systemctl restart NetworkManager"\033[0m')
#
# if __name__ == '__main__':
# show_menu()
#********************************
#模擬字符串lstrip用法
# whitesps = '\r\n\v\f\t'
#
# def rmlsps(astr):
# for i in range(len(astr)):
# if astr[i] not in whitesps:
# return astr[i:]
# else: #所有字符均爲空,循環正常結束,返回空串
# return ''
#
# if __name__ == '__main__':
# print(rmlsps('\thello'))
# whitesps = '\r\n\v\f\t'
#
# def rmrsps(astr):
# for i in range(-1,-len(astr),-1): #自右向左 下標爲負
# if astr[i] not in whitesps:
# return astr[:i + 1] #結束下表對應的字符不包含,所以加1
# else:
# return ''
#
# if __name__ == '__main__':
# print(rmrsps(''))
# print(rmrsps('\thello'))
# whitesps = ' \r\n\v\f\t'
#
# def rmrsps(astr):
# for i in range(len(astr) - 1, -1, -1):
# if astr[i] not in whitesps:
# return astr[:i + 1] # 結束下標對應的字符不包含,所以加1
# else:
# return ''
#
# if __name__ == '__main__':
# print(rmrsps(''))
# print(rmrsps(' \thello '))
"""
我國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
思路:
1、答案不只一個
2、如果全是公雞i,最多100/5只
3、如果全是母雞j,最多100/3只
4、如果全是小雞k,100塊錢,可以買300只;但,所有的雞最多是100只
5、雞的數目i+j+k==100
6、雞的價錢i * 5 + j * 3 + k / 3 == 100
作者:凱茜的老爸
鏈接:https://www.jianshu.com/p/a915980dadd0
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
"""
# for i in range(100//5+1): #//表示只留商 不要小數 捨棄餘數
# for j in range(100//3+1):
# for k in range(100 + 1):
# if i + j + k == 100 and i * 5+j*3+k/3 == 100:
# print('公雞:%s,母雞:%s,小雞:%s'% (i,j,k))
#fork子進程解析
# import os
#
# for i in range(3):
# pid = os.fork()
# if not pid:
# print('hello')
#
#可變與不可變對象的效率
# from random import choice
# import string
#
# all_chs = string.ascii_letters + string.digits #大小寫字母加數字
#
# def gen_pass(n = 8):
# result = []
#
# for i in range(n):
# ch =choice(all_chs)
# result.append(ch)
#
# return ''.join(result)
#
# if __name__ == '__main__':
# print(gen_pass())
# print(gen_pass(4))
# print(gen_pass(10))
#************比較文件的差異
# import difflib
# import webbrowser
# import sys
# import string
# import os
# from random import choice
#
# def rand_chs(n=8): #默認生成8個隨機字符
# all_chs = string.ascii_letters + string.digits
# result = [choice(all_chs)for i in range(n)]
# return ''.join(result)
#
# #函數接受連個相似的文件名,返回HTML形式的字符串
# def make_diff(lfile,rfile):
# d = difflib.HtmlDiff()
#
# #將兩個文件分別讀到列表中
# with open(lfile) as fobj:
# ldata = fobj.readlines()
#
# with open(rfile) as fobj:
# rdata = fobj.readlines()
#
# return d.make_file(ldata,rdata)
#
# if __name__ == '__main__':
# try:
# lfile = sys.argv[1]
# rfile = sys.argv[2]
# except IndexError:
# print('Usage: %s file1 file2'% sys.argv[0])
# sys.exit(1)
# if not os.path.isfile(lfile):
# print('No such file: ', lfile)
# sys.exit(2)
# if not os.path.isfile(rfile):
# print('No such file: ', rfile)
# sys.exit(3)
# data = make_diff(lfile,rfile)
# #以下只是爲說明內容增加中文顯示,非必須項
# data = data.replace(';Added', ';Added(增加)')
# data = data.replace('>Changed', '>Changed(改變)')
# data = data.replace('>Deleted', '>Deleted(被刪除)')
# data = data.replace('(f)irst change', '(f)irst change【第一處變更】')
# data = data.replace('(n)ext change', '(n)ext change【下一處變更】')
# data = data.replace('(t)op', '(t)op【回到頂部】')
# html_file = '/tmp/%s.html' % rand_chs() # 用隨機字符生成文件名
# with open(html_file, 'w') as fobj:
# fobj.write(data)
# webbrowser.open_new_tab('file:///%s' % html_file) # 使用瀏覽器打開文件
#****************************
#進度條
"""
[root@room8pc16 ~]# vim /tmp/process_bar.py
from tqdm import tqdm
import time
for i in tqdm(range(10)):
time.sleep(1)
[root@room8pc16 ~]# python3 /tmp/process_bar.py
30%|█████████████▏ | 3/10 [00:03<00:07, 1.00s/it]
"""
#帶進度條的拷貝文件
# import os
# import sys
# import tqdm import tqdm
#
# def copy(src_fname,dst_fname,length=4096):
# size = os.stat(src_fname).st_size
# times,extra = divmod(size,length)
# if extra:
# times += 1
#
# with open(src_fname,'rb') as src_fobj:
# with open(dst_fname,'wb') as dst_fobj:
# for i in tqdm(range(times)):
# data = src_fobj.read(length)
# dst_fobj.write(data)
#
# if __name__ == '__main__':
# copy(sys.argv[1],sys.argv[2])
#取出指定時間段的文本
# import time
#
# fname = 'myfile.txt'
# t1 = time.strptime('2019-5-15 09:00:00', '%Y-%m-%d %H:%M:%S')
# t2 = time.strptime('2019-5-15 12:00:00', '%Y-%m-%d %H:%M:%S')
#
# with open(fname) as fobj:
# for line in fobj:
# t = time.strptime(line[:19],'%Y-%m-%d %H:%M:%S')
# if t1 < t < t2:
# print(line,end='')
一起學Python吧~函數編程之釘釘機器人
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.