Daha çox

Sahə kalkulyatorunda Python istifadə - birdən çox sahə üzərində / əgər


Digər 6 sahədəki ən aşağı baldan asılı olaraq bir sahəni necə dolduracağımı öyrənməyə çalışıram. İf / else ifadələri ilə əlaqəli bir neçə başqa sual oxudum, ancaq Python-u öyrənməyə yeni başlayıram, buna görə işləyən hər hansı bir kodu bir araya gətirməyə çalışıram.

Xüsusiyyət sinifindəki hər bir obyekt identifikatoru üçün digər 6 sahə arasındakı ən pis nəticə alan bir 'Əsas uğursuzluq' sahəsini doldurmağa çalışıram.

Digər sahələr bunlardır: 'İnterconnectivity', 'PropCover', 'PatchSize', 'ShapeIndex', 'Naturalness' və 'EdgeNat' və bunların hamısı qısa tamdır, yüksək ədədlər az saydan daha yaxşıdır.

Məsələn, 'Interconnectivity' bir obyekt identifikatoru üçün 5 sahə üzrə ən aşağı puana sahib olsaydı, bu obyekt identifikatoru üçün 'Main Failing' sütununu 'Interconnectivity' yazan mətnlə necə dolduracağımı öyrənmək istərdim.

Düzəliş edildi: Budur Branco'nun köməyi ilə indiyə qədər sınadığım kodun bir nümunəsi. Səhv olmadan işləyir, amma MainFailing sahəsini boş qoyur ('return resultList [0]' olduqda) və ya 0 ilə doldurur (return resultList [1] olduqda).

Kod blok:

myFunction (! InterconnectivityScore !,! PropCoverScore !,! PatchSizeScore !,! ShapeIndexScore !,! NatScore !,! EdgeNatScore!)

Məntiq öncəsi skript kodu:

def myFunction (interconnectivityScoreValue, propCoverScoreValue, patchSizeScoreValue, shapeIndexScoreValue, natScoreValue, edgeNatScoreValue): resultList = ["", 0] if interconnectivityScoreValue <= resultList [1]: resultList [connect] = resultList [1]: resultList [0] = "ProportionalCover" resultList [1] = PropCoverScore əgər patchSizeScoreValue <= resultList [1]: resultList [0] = "PatchSize" resultList [1] = PatchSizeScore əgər shapeIndexScoreValue <= resultList [1] ]: resultList [0] = "ShapeIndex" resultList [1] = ShapeIndexScore əgər natScoreValue <= resultList [1]: resultList [0] = "Naturalness" resultList [1] = NatScore əgər edgeNatScoreValue <= resultList [1]: resultList [ 0] = "EdgeNaturalness" resultList [1] = EdgeNatScore returnListlist [1]

Bunu sınayın (@ alfa-beta-şorba şərhinə əsasən düzəldilir):

def myFunction (inter, prop, patch, shp, nat, edge): myList = [inter, prop, patch, shp, nat, edge] myList.sort () myDict = {'İnterconnectivity': inter, 'PropCover': prop , 'PatchSize': yamaq, 'ShapeIndex': shp, 'Naturalness': nat, 'EdgeNat': edge} myVal = 101 # maksimum + 1 mümkün dəyər olaraq 101 istifadə edərək; ehtiyac olduqda tənzimləyin myReturn = "üçün k, v üçün myDict.iteritems (): əgər v 

Diqqət yetirin ki, iki uyğun aşağı dəyəriniz varsa, birini digərindən seçəcək bir şey yoxdur. Bunun üçün meyarlarınız nə olursa olsun əlavə yoxlama tələb olunur. Lüğət sıralanmamış olduğundan onu bu şəkildə idarə edə bilməzsiniz.

Budur bağlamalar üçün isteğe bağlı bir bənd ilə lüğətlərsiz başqa bir yol. Bağlar vəziyyətində fərqli məntiq istəyə bilərsiniz.

def myFunction2 (inter, prop, patch, shp, nat, edge): # dəyər sırasını təmin etmək üçün toples istifadə edin myScoreTuple = (dayaq, yamaq, shp, nat, edge) myTextTuple = ('PropCover', 'PatchSize', 'ShapeIndex' , 'Naturalness', 'EdgeNat') # başlanğıc dəyərlərini myLowValue = inter myReturn = 'Bağlantı' # indi intervaldakı i üçün daha aşağı bir dəyəri yoxlayın (len (myScoreTuple)): əgər myScoreTuple [i] 

Bunu sahə kalkulyatoru və pitondan istifadə edərək edə bilərsiniz. Ayrıştırıcının Python-a ayarlandığından və kod blokunun göstərildiyindən əmin olun.

Qurduğum kod yalnız bir sıra IF ifadələrini istifadə edir. Rəqəmsal puan olduğunu düşündüyüm ballarını müqayisə etdiyim üçün bunun daha asan olduğuna qərar verdim? Hər iki halda da eyni qiymətə sahib olan 2 bal üçün yoxlama aparmıram. Əminəm ki, o hissəni müəyyənləşdirə və ya simlərin necə idarə olunacağını müəyyənləşdirə bilərsiniz (əgər məlumat belə saxlanılırsa). Mən, elif və s. Haqqında narahat olmayacağam ... Bu sizin olacaq Əsas uğursuzluq sahə kalkulyatoru. Əsas budur Məntiq öncəsi skript kodu: hissə. Bu, * MainFailing * (Mənim üçün Field12) hissənizdəki ötürülmüş məlumatları işləmək üçün istifadə edəcəyiniz funksiyanı əks etdirir. Bunlar funksiya parametrlərinizdir.

def myFunction (interconnectivityValue, propCoverValue, patchSizeValue, shapeIndexValue, naturalnessValue, edgeNatValue): resultList = ["", 0] if interconnectivityValue <= resultList [1]: resultList [0] = "interconnectivity" resultList [1] = def myFunction = resultList [1]: resultList [0] = "propCover" resultList [1] = patchSizeValue olduqda propCoverValue <= resultList [1]: resultList [0] = "patchSize" resultList [1] = patchSizeValue əgər shapeIndexValue <= resultList [1 ]: resultList [0] = "shapeIndex" resultList [1] = shapeIndexValue if naturalnessValue <= resultList [1]: resultList [0] = "naturalness" resultList [1] = naturalnessValue if edgeNatValue <= resultList [1]: resultList [ 0] = "edgeNat" resultList [1] = edgeNatValue return resultList [0]

The Əsas uğursuzluq hissə, elan etdiyiniz hər hansı bir funksiyaya necə zəng etmək istədiyinizi müəyyənləşdirməyə imkan verir Məntiq öncəsi skript kodu: bölmə. Hər sətir üçün sahələri ötürmək üçün sahə adlarının! 'S ilə əhatə olunduğuna diqqət yetirin. Python, atribut cədvəlindən dəyəri götürməyi belə bilir.

Sahə kalkulyatorunda python (və ya VB Script) istifadə etmək daha python mərkəzli bir yanaşma istifadə etmək üçün gözəl bir addımdır. Şəxsən bunu python interaktiv pəncərəsindən və arcpy UpdateCursor istifadə edərək etməyi üstün tutardım. Sahə Kalkulyator hissəsini anladığınızda baxa biləcəyiniz başqa bir yanaşma budur.


Videoya baxın: Python Dərs 5. Dövrlərdavam. Break, Continue və Else operatorları (Oktyabr 2021).