Daha büyük zafer için yukarı ve ileri!


15

Bu meydan okuma 95 yaşında vefat eden Stan Lee'ye bir başka haraç olsun.

Stan Lee bize paha biçilmez bir miras ve tuhaf bir yakalama kelimesi bıraktı: Excelsior . Yani , bunun anlamı olduğunu söylediklerine dayanan küçük bir meydan okuma :

Son olarak, “Excelsior” ne demektir? “Daha büyük zafer için yukarı ve ileri!” Tweeti bitirdiğimde sana dilediğim bu! Excelsior!

Meydan okuma

Negatif olmayan bir tamsayı serisi verildiğinde, Excelsior!bir tamsayı bir öncekinden daha büyük olduğunda bir satır çıkar .

kurallar

  • Girdi, negatif olmayan tamsayılardan oluşan bir dizi olacaktır.
  • Çıktı, sözcüğü Excelsior(büyük / küçük harf önemli) izleyen satırlardan oluşacak ve bunu !, daha büyük sayıların geçerli çalışmasının uzunluğu kadar takip edecektir. Bir dizi dizeyi de döndürebilirsiniz.
  • Giriş ve çıkış biçimleri site kurallarına göre esnektir; bu nedenle bunları dil biçimlerinize uyarlamaktan çekinmeyin. Ayrıca satırların sonuna boşluklar veya gerekirse metinden önce veya sonra ekstra yeni satırlar ekleyebilirsiniz.

Örnekler

Input             Output
-----------------------------------
[3,2,1,0,5]       Excelsior!      // Excelsior because 5 > 0

[1,2,3,4,5]       Excelsior!      // Excelsior because 2 > 1
                  Excelsior!!     // Excelsior because 3 > 2 (run length: 2)
                  Excelsior!!!    // Excelsior because 4 > 3 (run length: 3)
                  Excelsior!!!!   // Excelsior because 5 > 4 (run length: 4)

[]                <Nothing>

[42]              <Nothing>

[1,2,1,3,4,1,5]   Excelsior!      // Excelsior because 2 > 1
                  Excelsior!      // Excelsior because 3 > 1
                  Excelsior!!     // Excelsior because 4 > 3 (run length: 2)
                  Excelsior!      // Excelsior because 5 > 1

[3,3,3,3,4,3]     Excelsior!      // Excelsior because 4 > 3

Bu , bu yüzden her dil için en kısa kod kazanabilir!


ouflak o ok, tamsayılar 1 basamaklı uzun varsayar
ASCII sadece

1
@ ASCII-sadece gerçekten değil. LUA'nın bununla ilgili bir sınırlaması olup olmadığını bilmiyorum, ancak bu durumda ouflak herhangi bir uzunluktaki tamsayıları ayrıştırmalıdır.
Charlie

@Charlie Lua bilmiyorum, ancak ayrıntılı olmasına rağmen, örneğin boşlukla sınırlandırılmış bir girdi almak ve bu şekilde bölünmek mümkündür .
Kevin Cruijssen

Ben bakıyorum. İşin püf noktası her iki senaryoyu da ele alabilmektir.
ouflak

C veya Javascript gibi FWIW dilleri yalnızca kendi hassasiyeti dahilindeki tam sayıları (9/16 basamak) işleyecektir.
user202729

Yanıtlar:


9

JavaScript (ES6), 58 54 bayt

a=>a.map(c=>a<(a=c)?`Excelsior${s+='!'}
`:s='').join``

Çevrimiçi deneyin!

Yorumlananlar

a =>                           // a[] = input array, also used to store the previous value
  a.map(c =>                   // for each value c in a[]:
    a <                        //   compare the previous value
    (a = c)                    //   with the current one; update a to c
                               //   this test is always falsy on the 1st iteration
    ?                          //   if a is less than c:
      `Excelsior${s += '!'}\n` //     add a '!' to s and yield 'Excelsior' + s + linefeed
    :                          //   else:
      s = ''                   //     reset s to an empty string and yield an empty string
  ).join``                     // end of map(); join everything

Önceki değeri saklamak için neden [] 'i tekrar kullanmak güvenlidir

Üç olası durum vardır:

  • Eğer a[ ] boş ait geri arama işlevi .map()hiç çağrılan değildir ve sadece boş bir dize veren, boş bir dizi olsun.
  • Eğer a[ ] sadece tek bir elemanı içeren x , ilk (ve benzersiz) test sırasında bu parçaya zorlama bir a < (a = c). Yani, x<x test ediyoruz , ki bu falsili. Boş bir dize içeren bir dizi alırız, yine boş bir dize veririz.
  • Eğer a[ ] çeşitli elemanları ihtiva etmesi ile zorlama bir NaNbirinci test sırasında a < (a = c). Bu nedenle sonuç yanlıştır ve yürütülen şey, s boş bir dizeye başlatılmasıdır - istediğimiz budur. İlk anlamlı karşılaştırma 2. tekrarda gerçekleşir.


5

05AB1E , 26 24 23 bayt

ü‹γvyOE.•1Š¥èò²•™N'!׫,

@Kroppeb sayesinde -2 bayt .

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

ü                        # Loop over the (implicit) input as pairs
                        #  And check for each pair [a,b] if a<b is truthy
                         #   i.e. [1,2,1,3,4,1,5,7,20,25,3,17]
                         #   → [1,0,1,1,0,1,1,1,1,0,1]
  γ                      # Split it into chunks of equal elements
                         #  i.e. [1,0,1,1,0,1,1,1,1,0,1]
                         #   → [[1],[0],[1,1],[0],[1,1,1,1],[0],[1]]
   vy                    # Foreach `y` over them
     O                   #  Take the sum of that inner list
                         #   i.e. [1,1,1,1] → 4
                         #   i.e. [0] → 0
      E                  #  Inner loop `N` in the range [1, length]:
       .•1Š¥èò²•         #   Push string "excelsior"
                        #   Titlecase it: "Excelsior"
                 N'!׫  '#   Append `N` amount of "!"
                         #    i.e. N=3 → "Excelsior!!!"
                      ,  #   Output with a trailing newline

Bu 05AB1E madenin ucu bakın (bölüm kompres dizeleri sözlükte parçası olmayan nasıl? ) Anlamak için .•1Š¥èò²•olduğunu "excelsior".


2
Ben gerçekten 05AB1E bilmiyorum ama 0Kgile alışverişi yapamaz mısınız O?
Kroppeb

@Kroppeb Ah, bunu tamamen özledim, ama evet, gerçekten yapabilirim. Teşekkürler! :)
Kevin Cruijssen


4

Java-8 118113 Bayt

n->{String e="";for(int i=0;i<n.length-1;)System.out.print(""==(n[i+1]>n[i++]?e+="!":(e=""))?e:"Excelsior"+e+"\n");}

Okuması kolay :

private static void lee(int num[]) {
    String exclamation = "";
    for (int i = 0; i < num.length - 1;) {
        exclamation = num[i + 1] > num[i++] ? exclamation += "!" : "";
        System.out.print("".equals(exclamation) ? "" : "Excelsior" + exclamation + "\n");
    }
}

2
İşte bazı çoraplar 10 bayt kaydetmek için: n->{var e="";for(int i=0;i<n.length-1;System.out.print(""==e?e:"Excelsior"+e+"\n"))e=n[i++]<n[i]?e+="!":"";}. Çevrimiçi deneyin ( 108 bayt ). (Java 10+)
Kevin Cruijssen

@KevinCruijssen Teşekkürler!
CoderCroc

2
n->{for(int e=0,i=0;i<n.length-1;)if(n[i++]<n[i])System.out.println("Excelsior"+"!".repeat(e++));else e=0;}( 107 bayt )
Olivier Grégoire

Sorunumu Sabitleme: ++eyerine e++en az bir olacak şekilde !basılacak.
Olivier Grégoire

1
: Senin golf @KevinCruijssen Küçük yazım hatası tek bayt kazandırmak e=...?e+"!":yerine e=...?e+="!":.
Olivier Grégoire

4

R , 86 bayt

Bu cevabın yarısı @ Giuseppe'nın. RIP Stan Lee.

function(a)for(i in diff(a))"if"(i>0,cat("Excelsior",rep("!",F<-F+1),"
",sep=""),F<-0)

Çevrimiçi deneyin!


4

05AB1E , 20 19 bayt

ü‹0¡€ƶ˜ε'!×”¸Îsiorÿ

Çevrimiçi deneyin!

açıklama

ü‹                    # pair-wise comparison, less-than
  0¡                  # split at zeroes
    €ƶ                # lift each, multiplying by its 1-based index
      ˜               # flatten
       ε              # apply to each
        '!×           # repeat "!" that many times
                  ÿ   # and interpolate it at the end of
           ”¸Îsior    # the compressed word "Excel" followed by the string "sior"

4

C (gcc / clang), 106 99 97 bayt

f(a,n)int*a;{int r=0,s[n];for(memset(s,33,n);n-->1;)r*=*a<*++a&&printf("Excelsior%.*s\n",++r,s);}

2 bayt golf için gastropner sayesinde .

Burada çevrimiçi deneyin .

Ungolfed:

f(a, n) // function taking a pointer to the first integer and the length of the array
  int *a; { // a is of type pointer to int, n is of type int

    int r = 0, // length of the current run
        i = 0, // loop variable
        s[n];  // buffer for exclamation marks; we will never need more than n-1 of those (we are declaring an array of int, but really we will treat it as an array of char)

    for(memset(s, 33, n); // fill the buffer with n exclamation marks (ASCII code 33)
        n -- > 1; ) // loop over the array

        r *= *a < *(++ a) // if the current element is less than the next:
             && printf("Excelsior%.*s\n", // print (on their own line) "Excelsior", followed by ...
                       ++ r, // ... r (incremented) of the ...
                       s) // ... n exclamation marks in the buffer s
             ; // else r is reset to 0

}

Bir çözüm yapmaya başladım, ancak kendinize o kadar yakın oldum ki, benimkini ayrı bir cevap olarak yayınlamak biraz aptalca hissetti. Yine de, orada bulunan birkaç fark size birkaç bayt kazandırabilir.
gastropner

@gastropner Sürümünüzü paylaştığınız için teşekkür ederiz. İyileştirmelerinizi dahil ettim ve 99 byte'a kadar golf yaptım. Sadece boş diziyi işlememize gerek kalmadıysa, aksi takdirde döngü stilinizi kullanarak 97 bayt olurdu .
OOBalance

4

Japt -R, 25 22 bayt

ò¨ ËÅ£`Ex­lÐâ`ú'!Y+A
c

Dene

Kamil sayesinde 3 bayt kurtardı

ò¨                      :Partition at items that are greater than or equal to the previous item
   Ë                    :Map
    Å                   :  Slice off the first element
     £                  :  Map each element at 0-based index Y
      `Ex­lÐâ`           :    Compressed string "Excelsior"
             ú'!        :    Right pad with exclamation marks
                Y+A     :     To length Y+10
c                       :Flatten
                        :Implicitly join with newlines & output


-RBayrak aslında gerekli değildir, zorluk çıkış dize dizisi can söylüyor.
Kamil Drakari

İyi ki, teşekkürler, @ KamilDrakari. İlk geçişimde bir çözüm denedim sliceama çok uzun süre çalıştığında işten çıkardım. Şimdi ona geri dönersek, sormanızla birlikte, sanırım onunla sıkışmış olmalıydım çünkü 22'ye indirdim.
Shaggy

3

Ortak Lisp, 111 bayt

(setq i 0)(loop for(a b)on(read)do(incf i(if(and b(> b a))1(- i)))(format(> i 0)"Excelsior~v@{~a~:*~}~%"i #\!))

Çevrimiçi deneyin!


3

Java 8, 106 bayt

n->{String s="",z=s;for(int i=0;i<n.length-1;)z+=n[i++]<n[i]?"Excelsior"+(s+="!")+"\n":(s="")+s;return z;}

Çevrimiçi deneyin!

(bu s... yikes'i yeniden atar)


(s="")+s=>(s="")
OOBalance

1
n->{String s="",z=s;for(int i=0;i<n.length-1;)z+=n[i++]>=n[i]?s="":"Excelsior"+(s+="!")+"\n";return z;}( 103 bayt ) s=""Yedek baytlara git.
Olivier Grégoire


3

R , 111 bayt

function(a,r=rle(sign(diff(a))),v=r$l[r$v>0])write(paste0(rep("Excelsior",sum(v)),strrep("!",sequence(v))),1,1)

Çevrimiçi deneyin!

Çok daha iyi bir Ar haraç bulunabilir burada - Ben de sabitlendi sequenceve rle.


Bu boş satırlar değil, 86 bayt?
J.Doe

2
@ J.Doe dang, bu çok daha iyi. Ben olsaydım bunu kendim gönderirdim.
Giuseppe

3

Jöle , 16 bayt

<Ɲṣ0ÄẎ”!ẋ“Ø6ḥ»;Ɱ

Karakterlerin bir listesini veren monadik bir Bağlantı.

Çevrimiçi deneyin! (altbilgi yeni satırlarla birleşir)

Nasıl?

<Ɲṣ0ÄẎ”!ẋ“Ø6ḥ»;Ɱ - Link: list of integers     e.g. [1,1,4,2,1,1,3,4]
 Ɲ               - for each pair of integers:      [1,1] [1,4] [4,2] [2,1] [1,1] [1,3] [3,4]
<                -   less than?                    [  0,    1,    0,    0,    0,    1,    1]
  ṣ0             - split at zeros                  [[],    [1],     [],   [],      [1,    1]]
    Ä            - cumulative sums                 [[],    [1],     [],   [],      [1,    2]]
     Ẏ           - tighten                         [1,1,2]
      ”!         - literal '!' character           '!'
        ẋ        - repeat (vectorises)             [['!'],['!'],['!','!']]
         “Ø6ḥ»   - dictionary lookup               ['E','x','c','e','l','s','i','o','r']
               Ɱ - map with:
              ;  -   concatenate                   [['E','x','c','e','l','s','i','o','r','!'],['E','x','c','e','l','s','i','o','r','!'],['E','x','c','e','l','s','i','o','r','!','!']]


3

Japt , 22 bayt

ò¨ ®£`Ex­lÐâ`+'!pYÃÅÃc

Çevrimiçi deneyin!

Basitleştirilmiş örnekle açıklama:

ò¨                       :Split whenever the sequence does not increase
                           e.g. [2,1,1,3] -> [[2],[1],[1,3]]
   ®               Ã     :For each sub-array:
    £            Ã       :  For each item in that sub-array:
     `Ex­lÐâ`             :    Compressed "Excelsior"
            +            :    Concat with
             '!pY        :    a number of "!" equal to the index
                               e.g. [1,3] -> ["Excelsior","Excelsior!"]
                  Å      :  Remove the first item of each sub-array
                            e.g. [[Excelsior],[Excelsior],[Excelsior,Excelsior!]]->[[],[],[Excelsior!]]
                    c    :Flatten
                           e.g. [[],[],[Excelsior!]] -> [Excelsior!]

3

Powershell, 69 bayt

$args|%{if($o-ne$e-and$_-gt$o){'Excelsior'+'!'*++$c}else{$c=0}$o=$_}

Daha az golf test senaryosu:

$f = {

$args|%{
    if($old-ne$empty-and$_-gt$old){
        'Excelsior'+'!'*++$c
    }else{
        $c=0
    }
    $old=$_
}

}

@(
    ,( (3,2,1,0,5),  'Excelsior!')      # Excelsior because 5 > 0

    ,( (1,2,3,4,5),  'Excelsior!',      # Excelsior because 2 > 1
                    'Excelsior!!',     # Excelsior because 3 > 2 (run length: 2)
                    'Excelsior!!!',    # Excelsior because 4 > 3 (run length: 3)
                    'Excelsior!!!!')   # Excelsior because 5 > 4 (run length: 4)

    ,( $null,         '')                # <Nothing>

    ,( (42),          '')                # <Nothing>

    ,( (1,2,1,3,4,1,5), 'Excelsior!',      # Excelsior because 2 > 1
                        'Excelsior!',      # Excelsior because 3 > 1
                        'Excelsior!!',     # Excelsior because 4 > 3 (run length: 2)
                        'Excelsior!')      # Excelsior because 5 > 1

    ,( (3,3,3,3,4,3),   'Excelsior!')      # Excelsior because 4 > 3
) | % {
    $a,$expected = $_
    $result = &$f @a
    "$result"-eq"$expected"
    $result
}

Çıktı:

True
Excelsior!
True
Excelsior!
Excelsior!!
Excelsior!!!
Excelsior!!!!
True
True
True
Excelsior!
Excelsior!
Excelsior!!
Excelsior!
True
Excelsior!

1
Orada çalışmak için bir gecikme işaretçisi almaya çalışıyordum ama nasıl olduğunu düşünemedim.
Veskah

3

PowerShell , 87 85 bayt

param($n)for(;++$i-lt$n.count){if($n[$i]-gt$n[$i-1]){"Excelsior"+"!"*++$c}else{$c=0}}

Çevrimiçi deneyin!

Muhtemelen orada, muhtemelen if-else'de saklanan bir yeniden yapılandırma var, ama genel olarak iyi. Ol '"somutlaştırılmamış değişken varsayılan olarak 0" hile kullanır hem dizin hem de !.


2

Retina , 55 bayt

\d+
*
L$rv`(_*,(?<!(?(1)\1|\2,)))+(_+)\b
Excelsior$#1*!

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

\d+
*

Tekli'ye dönüştür.

rv`(_*,(?<!(?(1)\1|\2,)))+(_+)\b

Çakışan maçları sağdan sola işleme koy (ancak maçlar soldan sağa listelenmiş olsa da). Bu, bir koşudaki her sayıyı eşleştirebileceğimiz anlamına gelir ve maç koşu başlangıcına kadar uzanır. Her eşleşme ayrıca, eşleşen her bir ek sayının önceden eşleşen ek sayıdan daha az olması veya henüz başka bir sayı eşleştirilmemişse ilk sayı olması gerektiği ile sınırlandırılmıştır.

L$...
Excelsior$#1*!

Her eşleşme için, Excelsiorçalışmadaki ek sayıların sayısıyla istediğiniz şekilde çıktı alın.


2

Pyth, 32 bayt

j+L"Excelsior"*L\!fT.u*hN<0Y.+Q0

Online Deneyin burada ya bir kerede tüm test durumları doğrulamak burada .

j+L"Excelsior"*L\!fT.u*hN<0Y.+Q0   Implicit: Q=eval(input())
                            .+Q    Get forward difference between consecutive elements of Q
                    .u         0   Reduce the above, returning all steps, with current value N starting at 0, next element as Y, using:
                       hN            N+1
                      *              Multiplied by
                         <0Y         1 if 0<Y, 0 otherwise
                  fT               Filter to remove 0s
              *L\!                 Repeat "!" each element number of times
 +L"Excelsior"                     Prepend "Excelsior" to each
j                                  Join on newlines, implicit print


2

Lua , 88 87 83 82 96 95 113 bayt

Orijinal sorunun ruhuna bağlı kalarak güncelleme için @Kevin Cruijssen'e teşekkürler.

s=io.read()n=9 e="Excelsior!"f=e
for c in s.gmatch(s,"%S+")do if n<c+0then print(e)e=e..'!'else e=f end n=c+0 end

Çevrimiçi deneyin!


1
Maalesef, ünlem işaretini kurallara göre yazdırmanız gerekiyor (gittikçe daha büyük sayıların geçerli çalışmasının uzunluğu başına bir ünlem işareti).
Charlie

Sorun değil. Başka biri bir şey görmedikçe burada yapabildiğim kadar çok şey yaptığımı düşünüyorum ...
ouflak

1
Lua'yı çok iyi bilmiyorum, ama burada kodunuz için bir düzeltme var, bu yüzden tüm test senaryolarını doğru şekilde çalıştırıyor Şu anda sadece bir "!" bir sayı öncekinden daha yüksek olduğunda, ancak durum böyle olmadığında tekrar 1'e sıfırlamazsınız. Daha fazla golf olabilir, ama ben asla Lua golf beri ben sadece küçük golf ile sabitleme üzerinde duruldu. Not:
Girdinin

2
@Charlie, meydan okuma açıklamasının altındaki bir yorumda çok basamaklı sayıları girdi olarak almanın mümkün olduğundan bahsettiğinden, burada boşlukla sınırlı bir girdi alıp üzerine bölünerek olası bir düzeltme .
Kevin Cruijssen

Kevin Cruijssen değişikliklerinin OP'nin beklentisiyle daha uyumlu olduğuna karar verdim. Teşekkürler!
ouflak

2

C ++ 14 (g ++), 123 118 bayt

[](auto a){for(int n=0,i=0;++i<a.size();)a[i]>a[i-1]?puts(&("Excelsior"+std::string(++n,33))[0]):n=0;}

Neyse ki std::stringa char. Burada çevrimiçi deneyin .

5 bayt tasarruf sağlayan gastropner sayesinde .

Ungolfed:

[] (auto a) { // void lambda taking a std::array of integer

    for(int n = 0, // length of the current run
        i = 0; // loop variable
        ++ i < a.size(); ) // start with the second element and loop to the last
        a[i] > a[i - 1] // if the current element is greater than the previous ...
        ? puts( // ... print a new line:
               &("Excelsior" + // "Excelsior, followed by ...
                std::string(++ n, 33)) // ... the appropriate number of exclamation marks (33 is ASCII code for '!'); increment the run length
               [0]) // puts() takes a C string
        : n = 0; // else reset run length

}


2

C # (.NET Çekirdek) , 115 107 105 bayt

a=>{var b="";for(int i=0;++i<a.Length;)if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!"));else b="";}

Çevrimiçi deneyin!

-8 bayt: b int sayacından "!" S tutan bir dize olarak değiştirildi
-2 bayt: satır içi işlev olarak ayarlanır b+="!" ( Zac Faragher sayesinde )

Girdiyi çekmek için bir Eylem temsilcisi kullanır ve dönüş gerektirmez.

Ungolfed:

a => {
    var b = "";                         // initialize the '!' string (b)
    for(int i = 0; ++i < a.Length;)     // from index 1 until the end of a
        if(a[i] > a[i - 1])                 // if the current index is greater than the previous index
            Console.WriteLine("Excelsior" +     // on a new line, print "Excelsior"
                                    (b += "!"));    // add a "!" to b, and print the string
        else                                // if the current index is not greater than the previous index
            b = "";                             // reset b
}

1
b+="!"Excelsior ile satır içi yaparak 2 bayt kaydedebilirsiniz if(a[i]>a[i-1])Console.WriteLine("Excelsior"+(b+="!")); Çevrimiçi deneyin!
Zac Faragher


2

J, 50 bayt

'Excelsior',"1'!'#"0~[:;@(([:<+/\);._1)0,2</\ ::0]

Çevrimiçi deneyin!

ungolfed

'Excelsior' ,"1 '!' #"0~ [: ;@(([: < +/\);._1) 0 , 2 </\ ::0 ]

1

Java, 113 bayt

String i="";for(int a=0;a<s.length-1;a++){if(s[a+1]>s[a]){i+="!";System.out.println("Excelsior"+i);}else{i="";}}

1

VBA, 114 bayt

For i=0 To UBound(a)-LBound(a)-1 If a(i+1)>a(i)Then s=s&"!" Debug.Print("Excelsior"&s&"") Else s="" End If Next i

Ne yazık ki, bu açıkça tanımlanmış bir değişkene sahip olduğu için geçerli bir çözüm değildir a. Bununla birlikte, işlevi subroutinegirdiyi beklenen tür dizisinin bir varyantı olarak alan bir işlev olarak tanımlarsanız, yaklaşımınızı geçerli bir çözüme dönüştürebilirsiniz. Bu yaklaşımın Golf edilmiş bir versiyonu, sub f(x) For i=0To UBound(x)-1 If x(i+1)>x(i)Then s=s+"!":Debug.?"Excelsior"s:Else s="" Next End Subkod bloğu arasındaki kopuklukların yeni satırları temsil ettiği gibi görünebilir
Taylor Scott

1

Python 3, 87 bayt

c='!'
for i in range(1,len(n)):
    if n[i]>n[i-1]:print('Excelsior'+c);c+='!'
    else:c='!'

Veya 97 aşağıdakilerle birlikte:

c='!';n=input()
for i in range(1,len(n)):
    if n[i]>n[i-1]:print('Excelsior'+c);c+='!'
    else:c='!'

Bu, girdilerin şu biçimde olacağını varsayar:

32105
12345
<null input>
1
1213415
333343

1
İlk programınız, önceden tanımlanmış bir değişken aracılığıyla girdi aldığından geçersizdir. İkincisi, çok basamaklı sayılar arasında ayrım yapamayacağı için geçersizdir. Python 2'yi neden kullanmıyorsunuz veya bunun yerine bir işleve dönüştürmüyorsunuz ?
Jo King

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.