2015-07-19 14 views
6

İşte şimdiye kadar benim kodudur:Python'daki bir döngüden sondaki virgül nasıl kaldırılır?

def main(): 
    for var in range (1, 101): 
     num= IsPrime(var) 
     if num == 'true': 
      print(var, end=', ') 

IsPrime işlevi, bir işlev asal olup olmadığını hesaplar.

1'den 100'e kadar olan asal sayıları, aralarında virgül ve boşluk bulunan tek bir satıra yazdırmam gerekiyor. Benim program yürütmeye çalışırsa

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 

ama çünkü ben her zaman virgül nasıl kaldırılacağını bilmiyorum 97. sonunda bir sondaki virgül almak ve örneğin: gibi, çıkış görünmelidir Bir döngü, str.rstrip ve [: -1] çalışmaz.

Ben bir döngü kullanmak gerekir ve ben diğer asal sayılar için

print('2') 
print(', ', var, end='') 

kullanamaz.

Bunu kodlamanın daha kolay bir yolu olup olmadığını veya bunu doğru bir şekilde gerçekleştirebilecek bir işlevden haberdar olmadığımı anlayamıyorum.

+0

'IsPrime (var)' olurdu o zaman 'eğer IsPrime (var)' bir boolean değil bir dize döndürmesi gereken –

cevap

9

Bence deyimsel Python kodu şöyle görünecektir:

Bu yerine işlevseldir

 
print(', '.join([str(x) for x in xrange(1, 101) if IsPrime(x) == 'true'])) 

(IsPrime aslında True veya bunun yerine bir dize False döndü eğer her şey daha iyi olurdu) emir kodu.

Zorunlu kod istiyorsanız, döngünün ilk öğesi hariç her öğeden önce ', ' belgesini yazdırmalısınız. Bunu, bir öğeyi gördükten sonra doğru olarak ayarladığınız bir boole değişkeni ile yapabilirsiniz.

+3

kontrol etmek için yeterli Eğer ifade etrafında '[...]' sildiyseniz, daha pythonic olurdu. Öyleyse sadece 'birleştirme' yöntemine aktarılan hafif bir jeneratör olurdu ... – koffein

+0

@koffein Hiç de fena değil! Hemen hemen her işlevsel programlama dilinde çalıştığı için kendimi filtrelemeyi seviyorum. – Borealid

+0

Bu durumda, 'itertools'dan' ifılter 'düşünülecek bir işlev olurdu, çünkü bildiğim kadarıyla,' filtre 'bir listeyi döndürür, tıpkı listede yer alan [...] ile anlamayı seviyorum. Kişisel olarak bir lambda satır içi oluşturmak zorunda kalsam, filtreyi sevmiyorum. Ben zaten bir işlev var, onun güzel, ama aksi takdirde bana daha sonra liste-kavrama/jeneratör ... – koffein

4

Sen bir liste halinde tüm sayıları koymak ve daha sonra tüm değerleri katılabilirsiniz:

def main(): 
    primes = [] 
    for var in range (1, 101): 
     if IsPrime(var) == 'true': 
      primes.append(var) 
     num = IsPrime(var) 
    print(', '.join(primes)) 
İlgili konular