fmpython
㈠ python入門遇到問題,我編寫的代碼運算結果只顯示整數位,小數點後一律抹去了,請問怎麼呢解決
#-*-coding:utf-8-*-
input_str=raw_input("你好,請輸入:")
ifinput_str[-1]in['K','k']:
m=float(eval(input_str[0:-1]))/1024
print"結果是%.4fM"%m
elifinput_str[-1]in['M','m']:
k=eval(input_str[0:-1])*1024
print"結果是%dK"%k
else:
print"錯啦!"
##########################################
你好,請輸入:50k
結果是0.0488M
你好,請輸入:2
錯啦!
你好,請輸入:2k
結果是0.0020M
你好,請輸入:5.023
錯啦!
你好,請輸入:0.1k
結果是0.0001M
㈡ 學習多目標優化需要掌握哪些python知識
多目標優化
目標優化問題一般地就是指通過一定的優化演算法獲得目標函數的最優化解。當優化的目標函數為一個時稱之為單目標優化(Single-
objective Optimization Problem,
SOP)。當優化的目標函數有兩個或兩個以上時稱為多目標優化(Multi-objective Optimization Problem,
MOP)。不同於單目標優化的解為有限解,多目標優化的解通常是一組均衡解。
多目標優化演算法歸結起來有傳統優化演算法和智能優化演算法兩大類。
1. 傳統優化演算法包括加權法、約束法和線性規劃法等,實質上就是將多目標函數轉化為單目標函數,通過採用單目標優化的方法達到對多目標函數的求解。
2. 智能優化演算法包括進化演算法(Evolutionary Algorithm, 簡稱EA)、粒子群演算法(Particle Swarm Optimization, PSO)等。
Pareto最優解:
若x*∈C*,且在C中不存在比x更優越的解x,則稱x*是多目標最優化模型式的Pareto最優解,又稱為有效解。
一般來說,多目標優化問題並不存在一個最優解,所有可能的解都稱為非劣解,也稱為Pareto解。傳統優化技術一般每次能得到Pareo解集中的一個,而
用智能演算法來求解,可以得到更多的Pareto解,這些解構成了一個最優解集,稱為Pareto最優解。它是由那些任一個目標函數值的提高都必須以犧牲其
他目標函數值為代價的解組成的集合,稱為Pareto最優域,簡稱Pareto集。
Pareto有效(最優)解非劣解集是指由這樣一些解組成的集合:與集合之外的任何解相比它們至少有一個目標函數比集合之外的解好。
求解多目標優化問題最有名的就是NSGA-II了,是多目標遺傳演算法,但其對解的選擇過程可以用在其他優化演算法上,例如粒子群,蜂群等等。這里簡單介紹一下NSGA-II的選擇演算法。主要包含三個部分:
1. 快速非支配排序
要先講一下支配的概念,對於解X1和X2,如果X1對應的所有目標函數都不比X2大(最小問題),且存在一個目標值比X2小,則X2被X1支配。
快速非支配排序是一個循環分級過程:首先找出群體中的非支配解集,記為第一非支配層,irank=1(irank是個體i的非支配值),將其從群體中除去,繼續尋找群體中的非支配解集,然後irank=2。
2. 個體擁擠距離
為了使計算結果在目標空間比較均勻的分布,維持種群多樣性,對每個個體計算擁擠距離,選擇擁擠距離大的個體,擁擠距離的定義為:
L[i]d=L[i]d+(L[i+1]m−L[i−1]m)/(fmaxm−fminm)
L[i+1]m是第i+1個個體的第m目標函數值,fmaxm 和 fminm是集合中第m個目標函數的最大和最小值。
3. 精英策略選擇
精英策略就是保留父代中的優良個體直接進入子代,防止獲得的Pareto最優解丟失。將第t次產生的子代種群和父代種群合並,然後對合並後的新種群進行非支配排序,然後按照非支配順序添加到規模為N的種群中作為新的父代。
㈢ python利用css定位如何判斷標簽和元素
對你的問題如下解答:
CSS語法表達式:
. 點表示class屬性,代碼案例:「.s_ipt」
[Class= 』s_ipt』] # 同上
# 表示id屬性,代碼案例: 「#kw」
[id=』kw』] # 同上
Tag 定位標簽時不需要加特殊符號,直接寫標簽名稱即可。代碼案例: 「input」
[元素] 其它屬性使用中括弧定位。代碼案例: 「[method="post"]」
> 表示為父級標簽元素,符號左邊為父級,右邊為子級。
:nth-child(1) 定位一組標簽中的某一個標簽,索引從頭開始計數(1)。
:nth-last-child(1) 定位一組標簽中的某一個標簽,索引從尾開始計數(1)。
多元素定位:
同一標簽滿足(父級/tag/id/class/其它):span>input#kw.s_ipt[name="wd"][autocomplete="off"]
希望我的回答對你有幫助
㈣ python中使用logging模塊在控制台列印日誌的同時也列印log文件,但發現控制台的信息會出現重復列印
loggin模塊需要進行很多封裝才好用,你這種情況應該是初始化有問題,給你貼一段代碼你自己照抄下來用用試試。
#-*-coding:UTF8-*-
#
importos
importlogging
classLogger(object):
'''
@summary:日誌處理對象,對logging的封裝
'''
def__init__(self,name='Logger'):
self.logger=logging.getLogger(name)
self.init_logger()
definit_logger(self):
self.logger.setLevel(logging.DEBUG)
#屏幕輸出日誌
stream=logging.StreamHandler()
stream.setLevel(logging.INFO)
#日誌樣式
fm_stream=logging.Formatter("[ 33[1;%(colorcode)sm%(levelname)s 33[0m%(asctime)s%(myfn)s:%(mylno)d:%(myfunc)s%(mymole)s]%(message)s","%m-%d%H:%M:%S")
stream.setFormatter(fm_stream)
self.logger.addHandler(stream)
defupdate_kwargs(self,kwargs,colorcode):
try:
fn,lno,func=self.logger.findCaller()
fn=os.path.basename(fn)
exceptExceptionasddd:
fn,lno,func="(unknownfile)",0,"(unknownfunction)"
ifnot"extra"inkwargs:
kwargs["extra"]={}
kwargs["extra"]["myfn"]=fn
kwargs["extra"]["mylno"]=lno
kwargs["extra"]["myfunc"]=func
kwargs["extra"]["colorcode"]=colorcode
kwargs["extra"]["mymole"]=""
defdebug(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"0")#原色
self.logger.debug(msg,*args,**kwargs)
definfo(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"32")#綠色
self.logger.info(msg,*args,**kwargs)
defwarning(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"33")#黃色
self.logger.warning(msg,*args,**kwargs)
deferror(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"31")#紅色
self.logger.error(msg,*args,**kwargs)
defcritical(self,msg,*args,**kwargs):
self.update_kwargs(kwargs,"31")#紅色
self.logger.critical(msg,*args,**kwargs)
使用方法:
fromloggerimportLogger
Logger().info('xxxxx')
Logger().warning('xxxxx')
Logger().error('xxxxx')
㈤ python教程哪裡下載
一、Python入門到進階的 廖雪峰 Python & JS & Git 教程PDF版 鏈接:㈥ 如何發布一個Python命令行工具
本文的目的也是非常簡單:
寫一個Python命令行工具,並且發布到PIP上面.並且在這個過程中給出我自己的一些思考.
如何分解這個發布任務?
只需要進行如下的兩個步驟便可以:
1.寫好一個Python命令行工具.
2.發布它.
當然,這樣不夠細致.再細分一下.
1.寫好一個Python命令行工具
1.1.命令行的特點,以及Python的如何編寫命令行
1.2.如何組織代碼結構.
2.發布
2.1.注冊pypi賬戶
2.2.注冊在賬戶下面注冊Python包
2.3.上傳打包好的Python命令行工具.
3.完善代碼
1.寫好一個Python命令行工具
寫好一個命令行工具首先要知道命令行工具是什麼?
在我看來,命令行工具就是一種完成某種類型的任務的終端程序.
也就是基本上沒有什麼用戶界面的程序.
由於基本上沒有什麼用戶界面,所以導致單個命令行的交互能力及其低下.但這種低下的交互性對於一些固定工作而言,簡直就是最靈活的工具.只需要輸入一些命令便可以完成某種類型的工作.實在是方便的很.
所以,某種程度上,終端程序低交互的缺點反而成了優點.
1.1.Python的如何編寫一個簡單的命令行
對於Python和命令行交互,我們很容易想出一個比較方便的方案.
sys.argv就是這樣的嘛!
我們很容易這樣寫代碼.
1
python testargv.py thisisaargv1
甚至我們也可以這樣寫命令行,
1
python testargv.py thisisaargv1 -d -f 0
那麼,這樣寫的後果就是,不方便解析出(不是不能,是不方便) -d -f 0 以及 thisisaargv1.
不信的話,你解析一個下面場景的命令行試試,
1
2
3
4
# 用戶可能這樣輸入
danmu.fm -q 1 -v 2
danmu.fm -q 1 -v 2
# 當然,肯定還有漏寫啦,等等,你得需要轉類型,增加各種blablabla的描述吧,添加默認的參數值吧.
於是Python就提供了一個非常好用的模塊可以使用.叫做argparse.
上面的描述就變成了這個樣子
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import argparse
APP_DESC="""
這就是描述
"""
print(APP_DESC)
if len(sys.argv) == 1:
sys.argv.append('--help')
parser = argparse.ArgumentParser()
parser.add_argument('-q','--quality',type=int,default=0,help="download video quality : 1 for the standard-definition; 3 for the super-definition")
parser.add_argument('-v','--verbose', default=0,help="print more debuging information")
parser.add_argument('-s','--store',help="保存流媒體文件到指定位置")
parser.add_argument('-c','--config',default=0,help="讀取~/.danmu.fm配置,請~/.danmu.fm指定資料庫")
parser.add_argument('url',metavar='URL',nargs='+', help="zhubo page URL (*/)")
args = parser.parse_args()
# 獲取對應參數只需要args.quality,args.url之類.
url = (args.url)[0]
print(url)
#其他執行邏輯
保存為danmu.py
這樣就可以執行命令
1
python danmu.py -q 1 -v 2
通過args就可以獲取參數,然後進行終端程序的參數初始化.
可是這和我們的要求還是不同嘛,我們不想多寫Python XXX,我們想直接XXX.就像這樣.
1
danmu.fm -q 1 -v 2
不急,下面就是了.
1.2.如何組織代碼結構.
於是,現在就要開始組織代碼結構了.
我們在最終的代碼目錄大概是這樣的.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
danmu.fm
├── README.md
├── danmufm
│ ├── __init__.py
│ ├── client
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── douyu_client.py
│ │ └── douyu_danmu_client.py
│ ├── danmu.py
│ ├── misc
│ │ ├── __init__.py
│ │ ├── color_printer.py
│ │ ├── downloaders.py
│ │ └── player.py
│ └── model
│ ├── __init__.py
│ └── douyu_msg.py
├── docs
├── setup.cfg
├── setup.py
├── sh.py
└── tests
這就是我上次寫的danmu.fm的代碼目錄.
聰明的你這時候你注意到了:
主要的程序不是放在根目錄下面,而是放在第二目錄danmufm下面.
2.setup.cfg 是什麼鬼東西
3.setup.py 是什麼鬼東西
對於上面幾點,我們分別進行解釋
1.2.1 為什麼主要程序在第二目錄下
為了把主要的程序分離出來,放在第二目錄下面,這樣的待會打包以後多出很多文件夾就不會對源碼造成干擾.
當然,由於把程序放在了第二目錄下面,所以,腳本裡面的from import語句應該使用相對路徑導入.
相對路徑導入的的時候需要注意運行的時候使用如下命令
1
python3 -m danmufm.danmu [xxxx]
1.2.2 setup.cfg
填寫如下內容即可.
1
2
[metadata]
description-file = README.md
然後去寫Markdown的Readme就好了.
1.2.3 setup.py
這個是重頭戲了.
setup這個py文件就是打包配置文件.對這個程序是誰的,有什麼依賴,入口是什麼,等等等等的配置.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#-*- encoding: UTF-8 -*-
from setuptools import setup, find_packages
"""
打包的用的setup必須引入,
"""
VERSION = '0.1.1'
setup(name='danmu.fm',
version=VERSION,
description="a tiny and smart cli player of douyutv,ximalayad,anmu based on Python",
long_description='just enjoy',
classifiers=[], # Get strings from ?%3Aaction=list_classifiers
keywords='python douyu danmu danmu.fm terminal',
author='twocucao',
author_email='[email protected]',
url='',
license='MIT',
packages=find_packages(),
include_package_data=True,
zip_safe=True,
install_requires=[
'requests',
],
entry_points={
'console_scripts':[
'danmu.fm = danmufm.danmu:main'
]
},
)
官方有distutils這個包管理器工具,設置也非常的簡單,只是,它不支持entry_points屬性,由於無法使用entry_point,也就無法通過命令來跳轉到指定模塊運行程序,這也就意味著,官方工具不方便寫成命令行.還是setuptools好.
上面需要注意的就是install_requires可以添加依賴.其他的你猜都可以猜出來是做什麼的.自己去看代碼,我就不多說了.
2.發布
所謂的發布,就是將打包好的程序的某個版本發布到某個倉庫中.
2.1.注冊pypi賬戶
到這個上面注冊賬號:
2.2.注冊在賬戶下面注冊Python包
進入對應項目根文件,然後執行
1
python3 setup.py register
這一步程序會讓你輸入剛剛注冊的賬號和密碼,然後注冊該包.注冊該包以後,你就有了一個小倉庫.可以存放不同版本的danmu.fm.
注冊的倉庫是可以在這個地址看到的,
2.3.上傳打包好的Python命令行工具.
這里需要藉助一個小工具,twine.twine是一個更加安全方便上傳打包好的代碼的工具.
1
pip3 install twine
接著開始打包,打包成兩個版本,一個是不需要build的版本,另一個是需要build的版本(順帶吐槽下,這兩個詭異的命名).
1
python setup.py sdist bdist_wheel
於是剩下來的就顯而易見了,上傳build完畢的程序到倉庫中.
1
twine upload dist/danmu.fm-0.1.2*
於是,安裝一下,測試是否成功
1
pip3 install danmu.fm --upgrade
命令行的工具是這樣使用的.
1
danmu.fm -q 2 -v 1
3.完善
不斷的完善代碼,然後打包終端程序發布到倉庫給別人用,這就是整個的PIP打包發布流程.
這個時候,你可能需要使用版本控制軟體.
你可能需要增多的代碼的測試.
㈦ 怎麼用python抓取網頁並實現一些提交操作
首先我們找到登錄的元素,在輸入賬號處選中–>右鍵–>檢查
然後直接查詢網頁源代碼去找到上面的部分,根據標簽來觀察提交的表單參數,這里強調一下:
form標簽和form標簽下的input標簽非常重要,form標簽中的action屬性代表請求的URL,input標簽下的name屬性代表提交參數的KEY。
代碼參考如下:
import requests
url="網址" #action屬性
params={
"source":"index_nav", #input標簽下的name
"form_email":"xxxxxx", #input標簽下的name
"form_password":"xxxxxx" #input標簽下的name
}
html=requests.post(url,data=params)
print(html.text)
運行後發現已登錄賬號,相當於一個提交登陸的操作
㈧ 怎麼用python簡單的製作一個網頁
1、打開sublime text 3,新建一個PY文件。