2010-11-07 18 views
10

Bu python kodunu otomatik olarak PHP'ye dönüştürebilen bir yazılım dönüştürücü var mı?Python Kodunu PHP'ye Dönüştürme

#!/usr/bin/python 
import math 

def calcNumEntropyBits(s): 
     if len(s) <= 0: return 0.0 
     symCount = {} 
     for c in s: 
       if c not in symCount: symCount[c] = 1 
       else: symCount[c] += 1 
     entropy = 0.0 
     for c,n in symCount.iteritems(): 
       prob = n/float(len(s)) 
       entropy += prob * (math.log(prob)/math.log(2)) 
     if entropy >= 0.0: return 0.0 
     else: return -(entropy*len(s)) 

def testEntropy(s): 
     print "Bits of entropy in '%s' is %.2f" % (s, calcNumEntropyBits(s)) 

testEntropy('hello world') 
testEntropy('bubba dubba') 
testEntropy('aaaaaaaaaaa') 
testEntropy('aaaaabaaaaa') 
testEntropy('abcdefghijk') 
+0

"Yazılım dönüştürücüsünü" tersine çeviren kullanıcı oldu. –

+1

Ha. Yığın Taşması, PHP kodunu gönderebileceğiniz ve Python'u geri alabileceğiniz bir API yöntemine ihtiyaç duyar! – JAL

+1

@JAL [Universal-transpiler] (https://github.com/jarble/universal-transpiler) PHP programlama dilinin küçük bir alt kümesini Python'a dönüştürebilir. Yine de hala devam eden bir çalışma. –

cevap

13

Ben vahşi herhangi Python to-PHP çevirici farkında değilim kodu gerekecek mevcut fakat hiç de kolay olmalı

return ($entropy >= 0.0)? 0.0: -($entropy*strlen($s)); 
: ilk fonksiyonunda

function calcNumEntropyBits($s) { 
     if (strlen($s) <= 0) return 0.0; 
     $symCount = array(); 
     foreach (str_split($s) as $c) { 
       if (!in_array($c,$symCount)) $symCount[$c] = 1; 
       else $symCount[$c] ++; 
     } 
     $entropy = 0.0; 
     foreach ($symCount as $c=>$n) { 
       $prob = $n/(float)strlen($s); 
       $entropy += $prob * log($prob)/log(2); 
     } 
     if ($entropy >= 0.0) return 0.0; 
     else return -($entropy*strlen($s)); 
} 

function testEntropy($s): 
     printf("Bits of entropy in '%s' is %.2f",$s,calcNumEntropyBits($s)); 

testEntropy('hello world'); 
testEntropy('bubba dubba'); 
testEntropy('aaaaaaaaaaa'); 
testEntropy('aaaaabaaaaa'); 
testEntropy('abcdefghijk'); 

son birkaç hatları da standart bir PHP üçlü ifadesi olarak yazılmış olabilir: liman ve benzerlikler noktaya oldukça kolaydır

+1

Bu iyi, ancak PHP'de "foreach" ile bir dizgi üzerinde yineleyemezsiniz. Sayısal tuşları ile 'for' kullanmak zorundasınız. Olduğu gibi, bu kod "foreach()" hatası için geçersiz bir argüman sağlar. – JAL

+3

Foreach kullanarak bir dize üzerinde yineleyebilirsiniz. Kod düzenlenmiş – stillstanding

+0

@stillstanding Evet, tabii ki önce bir diziye dönüştürürseniz yapabilirsiniz. Yine de belirttiğim gibi bir ham dizgi değil. – JAL

2

Böyle araç noktasına kendiniz

6

Python'da bir PHP yorumcusu yapmak için yaklaşık 1/2 yoldayım ve Python'a bağlantı yapmak neredeyse imkansız hale getirecek binlerce olasılıkla oynayabilecek düzinelerce büyük kenar durumunun olduğunu anlayabiliyorum. PHP. Python'un PHP'ye göre daha güçlü bir dilbilgisi vardır, bu arada daha fazla dil bilgisine sahip olurken, Python'un stdlib'i muhtemelen sınıfındaki herhangi bir başka dile kıyasla en gelişmişlerden biridir.

Benim önerim, sorunuzu bir adım daha ileri götürmek, neden PHP'de bir dizi Python tabanlı mantığa ihtiyaç duymaktır. Kodunuzu aktarmaya/çevirmeye yönelik alternatifler PHP'den Python'a alt işlem yapmayı, PHP'nin görünüm mantığını ele alırken Python'un arka uçta çalışmasını sağlamak için Gearman'ı kullanmayı veya çok daha fazla ilgili çözümün servis otobüsü veya ileti kuyruğu uygulamak olduğunu söyleyebilir. Bir PHP uygulaması ve Python hizmetleri.

PS. Herhangi bir okunabilirlik sorunu için özür dilerim, şimdi 2 günlük bir sürat bitiriyoruz.

1

Kendime aynı soruyu merak ettim ve GitHubGist sitesinde bu PyToPhp.py dosyasını buldum. Bu basit ve başlangıç ​​için bir başlangıç ​​noktası gibi görünüyor.

Ona bir bakacağım!

6

py2php adlı bir pythondan php dönüştürücüsü oluşturdum. Temel mantığı otomatik olarak çevirebilir ve daha sonra kütüphane aramalarını vb. Düzeltmeniz gerekir. Hala deneysel.

İşte OP tarafından sağlanan python'dan otomatik olarak oluşturulmuş PHP.

<?php 
require_once('py2phplib.php'); 
require_once('math.php'); 
function calcNumEntropyBits($s) { 
    if ((count($s) <= 0)) { 
     return 0.0; 
    } 
    $symCount = array(); 
    foreach($s as $c) { 
     if (!$symCount.__contains__($c)) { 
      $symCount[$c] = 1; 
     } 
     else { 
      $symCount[$c] += 1; 
     } 
    } 
    $entropy = 0.0; 
    foreach($symCount->iteritems() as $temp_c) { 
     $prob = ($n/float(count($s))); 
     $entropy += ($prob * (math::log($prob)/math::log(2))); 
    } 
    if (($entropy >= 0.0)) { 
     return 0.0; 
    } 
    else { 
     return -($entropy * count($s)); 
    } 
} 

function testEntropy($s) { 
    pyjslib_printFunc(sprintf('Bits of entropy in \'%s\' is %.2f', new pyjslib_Tuple([$s, calcNumEntropyBits($s)]))); 
} 

testEntropy('hello world'); 
testEntropy('bubba dubba'); 
testEntropy('aaaaaaaaaaa'); 
testEntropy('aaaaabaaaaa'); 
testEntropy('abcdefghijk'); 

dolayı matematik ithalat ve __contains__ doğru aday olmayacağını, ancak bu elle düzeltmek için yeterince kolay olurdu.

+0

harika bir iş ....... – luky

İlgili konular