Tập lệnh python nhỏ nhất để in các số chẵn từ 0 đến 100


11

Tôi đang giải quyết một vấn đề mà tôi tự đặt ra cho vui, đó là tạo ra một kịch bản python in các số chẵn từ 0 đến 100. Thách thức là làm cho kịch bản càng nhỏ càng tốt. Đây là những gì tôi có cho đến nay:

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

Hiện tại nó là 60 byte. Bất cứ ai có thể nghĩ ra một cách để làm cho nó nhỏ hơn?


Chỉnh sửa: print(*range(2,101,2),sep='\n')là 30 byte. Có nhỏ hơn không?


4
i=2;exec"print i;i+=2;"*50
Vectorized

2
Mẹo này nằm trong trang mẹo chơi golf python codegolf.stackexchange.com/questions/54/ .
Vectorized

4
Đây có phải là bắt đầu lúc 0hay 2không? Tôi không trăn nhiều, nhưng có vẻ như hai ví dụ của bạn làm những việc khác nhau. Xin hãy sửa tôi nếu không.
Geobits

20
print "0 10 100"(là nhị phân OK?)
squossish ossifrage

1
@squeamishossifrage đừng quên đánh gôn ngoài không gian;)
isaacg

Câu trả lời:


37

Python 2 - 12 ký tự

print 8**999

Có thể tìm thấy biểu diễn thập phân của tất cả các số chẵn từ 0 đến 100 trong đầu ra:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Như một phần thưởng, số lẻ có thể.


Vấn đề duy nhất: Nó in các số lẻ và nhiều hơn nữa.
xem

1
@Sieg, chẵn và lẻ ... kinda có tất cả các cơ sở được bảo hiểm, không chắc làm thế nào bạn tìm thấy "nhiều hơn nữa" trong đó. ;)
paqogomez

Đây không phải là lần đầu tiên tôi có ý kiến ​​khác với những người dùng khác. Tôi thích câu trả lời của bạn dù sao đi nữa.
xem

@paqogomez số chẵn 0-100, số lẻ và nhiều số chẵn hơn> 100
OJFord

Quá tò mò để tránh hỏi Q câm, tại sao cụ thể là 8 * 999?
0xc0de

31

Python 3, 22 (Có thể không được phép)

Nếu thử thách là "tạo tập lệnh python in các số chẵn từ 0 đến 100" chứ không phải "tạo tập lệnh python in các số chẵn từ 0 đến 100, phân tách dòng mới ", thì giải pháp ngắn nhất là:

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

Hãy nhớ rằng, điều rất quan trọng trong việc chơi golf mã không đặt ra bất kỳ giới hạn nào cho bản thân bạn mà bạn không phải làm - làm những gì vấn đề yêu cầu, và không hơn thế nữa.


1
Không phải câu trả lời thứ hai của OP trong bản chỉnh sửa có khiến bạn nghĩ rằng anh ấy muốn dòng mới tách ra không?
Moop

10
Điều đó hoàn toàn có thể, và đó là lý do tại sao possibly not allowedtrong tiêu đề. Mặt khác, cũng có thể anh ấy / cô ấy đã bị cuốn vào việc khớp với đầu ra của chương trình ban đầu của anh ấy và quên đi thông số vấn đề ban đầu. Vì tôi không biết đó là trường hợp nào, tôi đã đưa ra câu trả lời này.
isaacg

22

Python2 26

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

khám phá độc lập giải pháp của @ bitpwner


Tôi nhận được một SyntaxError khi tôi cố chạy nó. Dòng trên cùng của câu trả lời này có nên nói "Python 2, 26" không?

+1, bạn dường như đã nhanh hơn 58 giây để đăng giải pháp này. :)
Ilmari Karonen

19

Con trăn 2 - 26

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

Dựa trên mẹo về exec với phép nhân chuỗi được tìm thấy tại Mẹo để chơi gôn trong Python .


Nên bao gồm 0, xem giải pháp của Sparr.
isaacg

Tôi nhận được một SyntaxError khi tôi cố chạy nó. Dòng trên cùng của câu trả lời này có nên nói "Python 2 - 26" không?

13

Python 2, 26 (có thể không được phép)

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

Nó không được chỉ định nghiêm ngặt, theo thứ tự các số sẽ được in.



9

Python 2 - 20 (Có thể không được phép)

Đây là python 2 cụ thể và có thể gian lận vì nó in danh sách, nhưng vì tất cả các số kết thúc trên màn hình:

print range(0,101,2)

7

Python 2 trong * NIX, 24

os.system('seq 0 2 100')

Nếu bạn cần thêm

import os

Sau đó, tổng số là 33 ký tự.


Thông minh - Điều này có thể tốt hơn trong một số trường hợp. Có phải hệ điều hành cụ thể?
isaacg

4
@isaacg Rất nhiều, như os.systemmột chương trình hệ thống.
xem

3
Nếu điều đó được cho phép, thì os.system('a'), vì tôi a
tình cờ

5
@OllieFord seq là một phần của lõi gnu. Bạn không có nhiều ảnh hưởng.
Sparr

4

Trăn 3, 29

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

Nếu bạn đang ở trong Python 2 và đã nhập hàm in, bạn không phải biến đối tượng iterator thành một danh sách và nó trở thành 25 ký tự:

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

Tôi không biết rằng điều đó hoàn toàn công bằng.

Đây là một ý tưởng thú vị khác hoạt động trong python 2 hoặc 3. Nó dài hơn một chút.

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

1
Phiên bản Python 3 có thể được rút ngắn để *a,=map(print,range(0,101,2))sử dụng Unpackable Unpacking .
flornquake

@flornquake Cảm ơn, tôi đã cập nhật nó.
IanH

3

Con trăn 2 - 24

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

(dựa trên giải pháp bitpwner và Sparr)

Trong trình bao, "_" chứa giá trị của biểu thức được đánh giá trước đó


Bạn nên lưu ý rằng điều này chỉ hoạt động, nếu được dán vào chế độ tương tác của một số trình thông dịch Python (ví dụ: nó không hoạt động trong IPython) và không phải là một tập lệnh.
Wrzlprmft

bạn nói đúng, tôi quên đề cập đến điều đó. (btw hoạt động trong bảng điều khiển Python tiêu chuẩn)
le_vine

1
-1 - Câu hỏi đề cập rõ ràng đến một kịch bản python , có nghĩa là mã phải được ghi vào một tệp và được thực thi. Mặt khác, một giải pháp tốt hơn chỉ đơn giản là: range(0,102,2)vì điều này sẽ hiển thị tất cả các số chẵn (cộng với một số dấu phẩy và hai dấu ngoặc) trên màn hình.
Bakuriu

1

Hiểu danh sách Python - 39

Điều này sử dụng một sự hiểu biết danh sách, một mẹo để làm cho nó ngắn hơn là nhân chỉ số với 2 thay vì đi từ 0 đến 100 và if x % 2kiểm tra theo dõi cho chẵn.

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

Sử dụng bản đồ và đề xuất của @ isaacg, cuối cùng có 39 ký tự:

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

Chỉnh sửa: Sau khi phân tách các giá trị theo dòng mới, nó không phải là ngắn nhất.


1
Điều này không trả lời câu hỏi - OP nói prints the even numbers from 0 to 100, không chỉ tạo ra chúng. Ngoài ra, nếu bạn chỉ muốn danh sách, range(0,101,2)ngắn hơn.
isaacg

1
@isaacg Cập nhật để trả lời câu hỏi, bây giờ lâu hơn nữa, cần phải nhúng từng giá trị trong str () để tham gia giết chết nó.
Ed Griebel

@Wrzlprmft Cảm ơn lời đề nghị, không biết tôi có thể làm điều đó! Mã thay đổi để phản ánh kiến ​​thức mới này.
Ed Griebel

1

Python 2 - 20 (nghi vấn)

Nếu giải pháp phân tách không gian của isaacg là OK, thì có lẽ định dạng danh sách bình thường cũng vậy:

print range(0,101,2)

Để biết thêm quy tắc, hãy áp dụng đề xuất của SirBraneDamuj từ các nhận xét:

print range(101)

và bạn đang ở tuổi 16. Vậy nếu có thêm một số rác ngăn cách chúng thì sao?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.