0 ile 100 arasındaki sayıları yazdırmak için en küçük python betiği


11

Kendimi eğlence için ayarladığım bir problem üzerinde çalışıyorum, bu da 0'dan 100'e eşit sayıları basan bir python betiği oluşturmaktır. Şimdiye kadar sahip olduğum şey bu:

for x in range(0, 101):
    if (x % 2 == 0):
        print x

Şu anda 60 bayt. Birisi onu küçültmenin bir yolunu düşünebilir mi?


Düzenleme: print(*range(2,101,2),sep='\n')30 bayt. Küçük mü?


4
i=2;exec"print i;i+=2;"*50
Vectörize

2
Bu ipucu python golf ipuçları sayfasındaki codegolf.stackexchange.com/questions/54/… .
Vectörize

4
Bunun 0veya ile başlaması gerekiyor 2mu? Çok piton yapmıyorum, ama bana iki örneğiniz farklı şeyler yapıyormuş gibi geliyor. Lütfen değilse düzeltin.
Geobits

20
print "0 10 100"(ikili tamam mı?)
r3mainer

1
@squeamishossifrage alanı golf oynamayı unutmayın;)
isaacg

Yanıtlar:


37

Python 2-12 karakter

print 8**999

0'dan 100'e kadar olan tüm çift sayıların ondalık temsili çıktıda bulunabilir:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Bir bonus olarak, tek sayılar da olabilir.


Tek sorun: Tek sayıları ve çok daha fazlasını yazdırır.
seequ

1
@Sieg, çift ve tek ... tüm üsleri kapladı, "çok daha fazlasını" nasıl bulacağınızdan emin değilim. ;)
paqogomez

İlk defa diğer kullanıcılardan farklı bir fikrim yok. Zaten cevabını seviyorum.
seequ

@paqogomez 0-100 arası sayılar, tek sayılar ve çok daha düzgün sayılar> 100
OJFord

Aptal bir Q sormaktan kaçınmak çok ilginç, neden özellikle 8 * 999?
0xc0de

31

Python 3, 22 (Muhtemelen izin verilmez)

Zorluk "çift sayıları 0'dan 100'e basan bir python betiği oluşturmak" ve "çift sayıları 0'dan 100'e, yeni satır ayrılmış olarak basan bir python betiği oluşturmak" değilse , en kısa çözüm:

print(*range(0,101,2))

Unutmayın, kod golfünde kendinize herhangi bir sınırlama koymamak çok önemlidir - sorunun ne istediğini ve daha fazlasını yapmayın.


1
OP'nin düzenlemedeki ikinci cevabı, yeni satırın ayrılmasını istediğini düşünmez mi?
Moop

10
Bu tamamen olasıdır ve bu nedenle possibly not allowedbaşlıkta yer almaktadır. Öte yandan, başlangıç ​​programının çıktısını eşleştirerek yakalanması ve ilk sorun spesifikasyonunu unutması da mümkündür. Durumun hangisi olduğunu bilmediğim için bu cevabı verdim.
isaacg

22

Python2 26

i=0;exec"print i;i+=2;"*51

@ bitpwner'in çözümünün bağımsız keşfi


Bunu çalıştırmaya çalıştığımda bir SyntaxError alıyorum. Bu yanıtın en üst satırında "Python 2, 26" yazmalı mı?

+1, bu çözümü yayınlamak için 58 saniyeniz daha hızlı görünüyor. :)
Ilmari Karonen


13

Python 2, 26 (muhtemelen izin verilmez)

i=102
while i:i-=2;print i

Sayıların hangi sırayla yazdırılacağı kesinlikle belirtilmemiştir.



9

Python 2-20 (Muhtemelen izin verilmez)

Bu, python 2'ye özgüdür ve listeyi yazdırdığı için muhtemelen hile yapar, ancak tüm sayılar ekranda sona erdiğinden:

print range(0,101,2)

7

* NIX içinde python 2, 24

os.system('seq 0 2 100')

Eklemeniz gerekiyorsa

import os

Sonra toplam 33 karakterdir.


Zeki - Bu bazı durumlarda daha üstün olabilir. İşletim sistemine özgü mü?
isaacg

4
@isaacg Pek çok, os.systembir sistem programı çağırır.
seequ

3
Buna izin verilirse, sistemimde istenen davranışa os.system('a')sahip bir programım aolduğu için ..
OJFord

5
@OllieFord seq gnu coreutils'in bir parçasıdır. Çok fazla nüfuzunuz yok.
Sparr

4

Python 3, 29

*a,=map(print,range(0,101,2))

Python 2'deyseniz ve yazdırma işlevini zaten içe aktardıysanız, yineleyici nesnesini bir listeye dönüştürmeniz gerekmez ve 25 karakter olur:

map(print,range(0,101,2))

Bunun tamamen adil olduğunu bilmiyorum.

İşte python 2 veya 3'te çalışan başka bir eğlenceli fikir. Biraz daha uzun.

def p(i):
    if i+2:p(i-2);print i
p(100)

1
Python 3 sürümü, Genişletilmiş Tekrarlanabilir Paket Açma*a,=map(print,range(0,101,2)) kullanılarak kısaltılabilir .
flornquake

@flornquake Teşekkürler, güncelledim.
IanH

3

Python 2-24

0;exec"_+=2;print _;"*50

(bitpwner ve Sparr çözümüne dayanarak)

Kabukta "_" daha önce değerlendirilen ifadenin değerini içerir


Bunun yalnızca bazı Python tercümanlarının (örneğin, IPython'da çalışmadığı gibi) etkileşimli moduna yapıştırıldığını ve komut dosyası olarak çalışmadığını unutmayın.
Wrzlprmft

haklısın, bundan bahsetmeyi unuttum. (btw standart Python konsolunda çalışır)
le_vine

1
-1 - Soru açıkça bir python betiğinden bahsediyor , bu da kodun bir dosyaya yazılması ve yürütülmesi gerektiği anlamına geliyor . Aksi takdirde daha iyi bir çözüm basit olacaktır: range(0,102,2)çünkü bu, ekranda tüm çift sayıları (artı bazı virgüller ve iki köşeli ayraç) gösterecektir.
Bakuriu

1

Python Listesi Anlama - 39

Bu bir liste kavrama kullanır, daha kısa yapmak için bir hile, 0'dan 100'e gitmek yerine endeksi 2 ile çarpmak ve if x % 2çift ​​için bir kontrol.

print'\n'.join(`2*x`for x in range(51))

Bir harita ve @ isaacg'ın önerisini kullanarak aynı 39 karakter olur:

print'\n'.join(map(str,range(0,101,2)))

Düzenleme: Değerleri satırsonu ile ayırdıktan sonra çok kısa değil.


1
Bu soruya cevap vermiyor - OP diyor ki prints the even numbers from 0 to 100, sadece onları üretmiyor . Ayrıca, sadece listeyi istiyorsanız range(0,101,2), daha kısadır.
isaacg

1
@isaacg Soruyu cevaplamak için güncellendi, artık çok daha uzun, birleştirme için her değeri str () içine gömmek zorunda kalıyor.
Ed Griebel

@Wrzlprmft Öneri için teşekkürler, bunu yapabileceğimi bilmiyordum! Kod bu yeni bilgiyi yansıtacak şekilde değiştirildi.
Ed Griebel

1

Python 2-20 (şüpheli)

İsaacg'nin boşlukla ayrılmış çözümü iyi ise, muhtemelen normal liste biçimlendirmesi de olur:

print range(0,101,2)

Daha fazla kural büküm için SirBraneDamuj'un önerilerini yorumlardan uygulayın:

print range(101)

ve 16 yaşındasınız. Ya onları ayıran fazladan çöp varsa?

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.