Đây là một câu hỏi mẹo để chơi golf trong python .
Trong nhiều sân golf tôi đã thực hiện bằng Python, một giá trị cố định được gán cho một trong hai biến được chọn bởi Boolean. Biến được chọn được ghi đè bởi giá trị đã cho và biến còn lại không thay đổi.
17 ký tự:
if b:y=z
else:x=z
Việc gán một giá trị có điều kiện là dễ dàng , nhưng việc gán cho một biến có điều kiện có vẻ khó hiểu. Tôi tự hỏi nếu có một cách ngắn hơn tôi đang thiếu.
Điều này sẽ dễ dàng nếu x,y
thay vào đó là một danh sách L
, nhưng giả sử bối cảnh yêu cầu tham chiếu đến các biến đủ để viết L[0]
và L[1]
bị cấm. Việc chuyển đổi mất quá nhiều thời gian:
20 ký tự:
L=[x,y];L[b]=z;x,y=L
Cách nhanh nhất mà tôi biết là với Python 2 exec
, thật kỳ lạ:
16 ký tự, Python 2:
exec"xy"[b]+"=z"
Lựa chọn tuple dường như dài hơn:
18, 19, 18, 18 ký tự:
x,y=b*(x,z)or(z,y)
x,y=[z,x,y,z][b::2]
y,x=[y,z,x][b:b+2]
y,x,*_=[y,z,x][b:] # Python 3
Có một số phương pháp ngắn hơn hoặc tối ưu hóa tiết kiệm ký tự? Bạn có thể giả sử b
là 0
hoặc 1
, không chỉ Falsey hay Truthy, và cũng đưa ra các giả định về các loại dữ liệu và giá trị nếu nó giúp.
x,y=C(x,y,z,b)
(14 ký tự) và đẩy bất kỳ thực hiện nào trong số này vào cơ thểC
.