Transpiles some Python into human-readable Golang.
Project description
pytago
Pytago is a source-to-source transpiler that converts some Python into human-readable Go.
Installation and usage
There are two "officially" supported ways to use Pytago:
- A web application you can run via docker
- A locally-installed command-line tool
Web application
Prerequisites
Installation
git clone https://github.com/nottheswimmer/pytago/
cd pytago
docker build -t pytago .
Usage
docker run -p 8080:8080 -e PORT=8080 -it pytago
# User interface
open http://127.0.0.1:8080/
# API
curl --request POST 'http://127.0.0.1:8080/' \
--header 'Content-Type: application/json' \
--data-raw '{"py": "print(\"Hello World\")"}'
Local command-line application
Prerequisites
- Go 1.16.x
- Python 3.10.x
- No, it will not work on 3.9. Search the code for "match."
go get -u golang.org/x/tools/cmd/goimports mvdan.cc/gofumpt github.com/segmentio/golines
Installation
via pip
pip install pytago
via setup.py (dev)
git clone https://github.com/nottheswimmer/pytago/
cd pytago
pip install -e .
via setup.py
git clone https://github.com/nottheswimmer/pytago/
cd pytago
pip install .
Usage
usage: pytago [-h] [-o OUTFILE] INFILE
positional arguments:
INFILE read python code from INFILE
options:
-h, --help show this help message and exit
-o OUTFILE, --out OUTFILE
write go code to OUTFILE
Examples
All examples presented here are used as tests for the program.
listappend
Python
def main():
a = [1, 2, 3]
a.append(4)
print(a)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
a = append(a, 4)
fmt.Println(a)
}
abs
Python
def main():
print(abs(-6))
print(abs(3))
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Abs(-6))
fmt.Println(math.Abs(3))
}
helloworld
Python
def main():
print("hello world")
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
input
Python
def main():
print("Hi, what's your name?")
name = input("Name: ")
print("Hi", name, "how old are you?")
age = int(input("Age: "))
print("Describe yourself in one sentence:")
description = input()
print("So your name is", name, "and you are", age, "years old, and your description is", '"' + description + '"')
if __name__ == '__main__':
main()
Go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
fmt.Println("Hi, what's your name?")
name := func(msg string) string {
fmt.Print(msg)
text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
return strings.ReplaceAll(text, "\n", "")
}("Name: ")
fmt.Println("Hi", name, "how old are you?")
age := func() int {
i, err := strconv.ParseInt(func(msg string) string {
fmt.Print(msg)
text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
return strings.ReplaceAll(text, "\n", "")
}("Age: "), 10, 64)
if err != nil {
panic(err)
}
return int(i)
}()
fmt.Println("Describe yourself in one sentence:")
description := func() string {
text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
return strings.ReplaceAll(text, "\n", "")
}()
fmt.Println(
"So your name is",
name,
"and you are",
age,
"years old, and your description is",
"\""+description+"\"",
)
}
randomness
Python
import random
def main():
print(random.random())
print(random.randrange(9000, 10000))
print(random.randint(9000, 10000))
items = ["Hello", 3, "Potato", "Cake"]
print(random.choice(items))
random.shuffle(items)
print(items)
u = random.uniform(200, 500)
print(u)
if random.random() > 0.5:
print("50/50")
names = ['Kitchen', 'Animal', 'State', 'Tasty', 'Big', 'City', 'Fish', 'Pizza', 'Goat', 'Salty', 'Sandwich',
'Lazy', 'Fun']
company_type = ['LLC', 'Inc', 'Company', 'Corporation']
company_cuisine = ['Pizza', 'Bar Food', 'Fast Food', 'Italian', 'Mexican', 'American', 'Sushi Bar', 'Vegetarian']
for x in range(1, 501):
business = {
'name': names[random.randint(0, (len(names) - 1))] + ' ' + names[
random.randint(0, (len(names) - 1))] + ' ' + company_type[random.randint(0, (len(company_type) - 1))],
'rating': random.randint(1, 5),
'cuisine': company_cuisine[random.randint(0, (len(company_cuisine) - 1))]
}
print(business)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math/rand"
"time"
)
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
fmt.Println(rand.Float64())
fmt.Println(func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(9000, 10000))
fmt.Println(func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(9000, 10000+1))
items := []interface{}{"Hello", 3, "Potato", "Cake"}
fmt.Println(items[rand.Intn(len(items))])
rand.Shuffle(len(items), func(i int, j int) {
items[i], items[j] = items[j], items[i]
})
fmt.Println(items)
u := func(a float64, b float64) float64 {
return rand.Float64()*(b-a) + b
}(200, 500)
fmt.Println(u)
if rand.Float64() > 0.5 {
fmt.Println("50/50")
}
names := []string{
"Kitchen",
"Animal",
"State",
"Tasty",
"Big",
"City",
"Fish",
"Pizza",
"Goat",
"Salty",
"Sandwich",
"Lazy",
"Fun",
}
company_type := []string{"LLC", "Inc", "Company", "Corporation"}
company_cuisine := []string{
"Pizza",
"Bar Food",
"Fast Food",
"Italian",
"Mexican",
"American",
"Sushi Bar",
"Vegetarian",
}
for x := 1; x < 501; x++ {
business := map[string]interface{}{"name": names[func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(0, len(names)-1+1)] + " " + names[func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(0, len(names)-1+1)] + " " + company_type[func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(0, len(company_type)-1+1)], "rating": func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(1, 5+1), "cuisine": company_cuisine[func(start int, stop int) int {
n := stop - start
return rand.Intn(n) + start
}(0, len(company_cuisine)-1+1)]}
fmt.Println(business)
}
}
string_methods
Python
def main():
lower = "hello world"
crazy = "HeLLo WoRlD"
upper = "HELLO WORLD"
lol = "---LOL---"
hearts = "🧡💛💚💙💜"
arabic_indic_digit = "٠"
whitespace = " \v\f\t\r\n"
s_hello_s = whitespace + lower + whitespace
multiline = lower + "\n" + crazy + "\r\n" + upper + "\n"
print(crazy.capitalize())
print(lower.endswith("world"))
print(lower.find(" "))
print(lower.find(" ", 2))
print(upper.find(" ", 7, 8))
print(lower.index(" "))
print(lower.index(" ", 2))
print(upper.index(" ", 2, 8))
print(lower.isalnum())
print(hearts.isascii())
print(arabic_indic_digit.isdecimal())
print(arabic_indic_digit.isdigit())
print(lower.islower())
print(arabic_indic_digit.isnumeric())
print(hearts.isprintable())
print(whitespace.isspace())
print(upper.isupper())
print(hearts.join([lower, crazy, upper]))
print(crazy.lower())
print(s_hello_s.lstrip() + "|")
print(lower.lstrip("h"))
print(lower.removeprefix("hello "))
print(lower.removesuffix(" world"))
print(lower.replace("world", "gophers"))
print(upper.replace("O", "OOOOO", 1))
print(upper.rfind("O"))
print(upper.rfind("O", 1))
print(upper.rfind("O", 1, 6))
print(upper.rindex("O"))
print(upper.rindex("O", 1))
print(upper.rindex("O", 1, 6))
print(s_hello_s.rstrip() + "|")
print(lower.rstrip("d"))
print(lower.split())
print(upper.split("L"))
print(upper.split("L", 1))
print(multiline.splitlines())
print(upper.startswith("HELLO"))
print(s_hello_s.strip() + "|")
print(lol.strip("-"))
print(crazy.title())
print(crazy.upper())
if __name__ == '__main__':
main()
Go
package main
import (
"bufio"
"errors"
"fmt"
"strings"
"unicode"
)
func main() {
lower := "hello world"
crazy := "HeLLo WoRlD"
upper := "HELLO WORLD"
lol := "---LOL---"
hearts := "🧡💛💚💙💜"
arabic_indic_digit := "٠"
whitespace := " \u000b\f\t\r\n"
s_hello_s := whitespace + lower + whitespace
multiline := lower + "\n" + crazy + "\r\n" + upper + "\n"
fmt.Println(strings.ToUpper(crazy[0:1]) + strings.ToLower(crazy[1:]))
fmt.Println(strings.HasSuffix(lower, "world"))
fmt.Println(strings.Index(lower, " "))
fmt.Println(func() int {
if r := strings.Index(lower[2:], " "); r != -1 {
return r + 2
}
return -1
}())
fmt.Println(func() int {
if r := strings.Index(upper[7:8], " "); r != -1 {
return r + 7
}
return -1
}())
fmt.Println(func(X string, sub string) int {
if i := strings.Index(X, sub); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(lower, " "))
fmt.Println(func(X string, sub string, start int) int {
if i := func() int {
if r := strings.Index(X[start:], sub); r != -1 {
return r + start
}
return -1
}(); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(lower, " ", 2))
fmt.Println(func(X string, sub string, start int, end int) int {
if i := func() int {
if r := strings.Index(X[start:end], sub); r != -1 {
return r + start
}
return -1
}(); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(upper, " ", 2, 8))
fmt.Println(func(X string) bool {
for _, r := range X {
if !((unicode.IsLetter(r) || unicode.IsDigit(r)) && (unicode.IsDigit(r) || unicode.IsNumber(r))) {
return false
}
}
return true
}(lower))
fmt.Println(func(X string) bool {
for _, r := range X {
if r > unicode.MaxASCII {
return false
}
}
return true
}(hearts))
fmt.Println(func(X string) bool {
for _, r := range X {
if !unicode.Is(unicode.Nd, r) {
return false
}
}
return len(X) != 0
}(arabic_indic_digit))
fmt.Println(func(X string) bool {
for _, r := range X {
if !unicode.IsDigit(r) {
return false
}
}
return len(X) != 0
}(arabic_indic_digit))
fmt.Println(func(X string) bool {
lower_found := false
for _, r := range X {
if !unicode.IsLower(r) {
if !unicode.IsSpace(r) {
return false
}
} else {
lower_found = true
}
}
return lower_found && len(X) != 0
}(lower))
fmt.Println(func(X string) bool {
for _, r := range X {
if !(unicode.IsDigit(r) || unicode.IsNumber(r)) {
return false
}
}
return len(X) != 0
}(arabic_indic_digit))
fmt.Println(func(X string) bool {
for _, r := range X {
if !unicode.IsPrint(r) {
return false
}
}
return true
}(hearts))
fmt.Println(func(X string) bool {
for _, r := range X {
if !unicode.IsSpace(r) {
return false
}
}
return len(X) != 0
}(whitespace))
fmt.Println(func(X string) bool {
upper_found := false
for _, r := range X {
if !unicode.IsUpper(r) {
if !unicode.IsSpace(r) {
return false
}
} else {
upper_found = true
}
}
return upper_found && len(X) != 0
}(upper))
fmt.Println(strings.Join([]string{lower, crazy, upper}, hearts))
fmt.Println(strings.ToLower(crazy))
fmt.Println(strings.TrimLeftFunc(s_hello_s, unicode.IsSpace) + "|")
fmt.Println(strings.TrimLeft(lower, "h"))
fmt.Println(strings.TrimPrefix(lower, "hello "))
fmt.Println(strings.TrimSuffix(lower, " world"))
fmt.Println(strings.ReplaceAll(lower, "world", "gophers"))
fmt.Println(strings.Replace(upper, "O", "OOOOO", 1))
fmt.Println(strings.LastIndex(upper, "O"))
fmt.Println(func() int {
if r := strings.LastIndex(upper[1:], "O"); r != -1 {
return r + 1
}
return -1
}())
fmt.Println(func() int {
if r := strings.LastIndex(upper[1:6], "O"); r != -1 {
return r + 1
}
return -1
}())
fmt.Println(func(X string, sub string) int {
if i := strings.LastIndex(X, sub); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(upper, "O"))
fmt.Println(func(X string, sub string, start int) int {
if i := func() int {
if r := strings.LastIndex(X[start:], sub); r != -1 {
return r + start
}
return -1
}(); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(upper, "O", 1))
fmt.Println(func(X string, sub string, start int, end int) int {
if i := func() int {
if r := strings.LastIndex(X[start:end], sub); r != -1 {
return r + start
}
return -1
}(); i != -1 {
return i
}
panic(errors.New("ValueError: substring not found"))
}(upper, "O", 1, 6))
fmt.Println(strings.TrimRightFunc(s_hello_s, unicode.IsSpace) + "|")
fmt.Println(strings.TrimRight(lower, "d"))
fmt.Println(strings.Fields(lower))
fmt.Println(strings.Split(upper, "L"))
fmt.Println(strings.SplitN(upper, "L", 1))
fmt.Println(func(s string) (lines []string) {
sc := bufio.NewScanner(strings.NewReader(s))
for sc.Scan() {
lines = append(lines, sc.Text())
}
return
}(multiline))
fmt.Println(strings.HasPrefix(upper, "HELLO"))
fmt.Println(strings.TrimSpace(s_hello_s) + "|")
fmt.Println(strings.Trim(lol, "-"))
fmt.Println(func(s string) string {
ws := true
var sb strings.Builder
for _, r := range s {
if unicode.IsSpace(r) {
ws = true
sb.WriteRune(r)
} else if ws {
ws = false
sb.WriteRune(unicode.ToUpper(r))
} else {
sb.WriteRune(unicode.ToLower(r))
}
}
return sb.String()
}(crazy))
fmt.Println(strings.ToUpper(crazy))
}
list_methods
Python
def main():
l1 = [1]
l2 = ["hello", "how", "are", "you?"]
l3 = [6.2, 1.6, 1.2, 20.1]
l1.append(2)
print(l1)
l1.extend([4, 5])
print(l1)
l1.insert(3, 3)
print(l1)
print(l1.index(2))
print(l1.count(3))
l1.remove(3)
print(l1)
while l1:
print(l1.pop())
l3.clear()
print(l3)
l1.sort()
print(l1)
l2.sort()
print(l2)
l3.sort()
print(l3)
l3.sort(reverse=True)
print(l3)
l2.reverse()
print(l2)
l4 = l2.copy()
l4.pop()
print(l4)
print(l2)
if __name__ == '__main__':
main()
Go
package main
import (
"errors"
"fmt"
"reflect"
"sort"
)
func main() {
l1 := []int{1}
l2 := []string{"hello", "how", "are", "you?"}
l3 := []float64{6.2, 1.6, 1.2, 20.1}
l1 = append(l1, 2)
fmt.Println(l1)
l1 = append(l1, []int{4, 5}...)
fmt.Println(l1)
l1 = append(l1, 3)
copy(l1[3+1:], l1[3:])
l1[3] = 3
fmt.Println(l1)
fmt.Println(func() int {
for i, val := range l1 {
if val == 2 {
return i
}
}
panic(errors.New("ValueError: element not found"))
}())
fmt.Println(func() int {
n := 0
for _, v := range l1 {
if v == 3 {
n += 1
}
}
return n
}())
func(s *[]int, x int) {
for i, val := range *s {
if reflect.DeepEqual(val, x) {
*s = append((*s)[:i], (*s)[i+1:]...)
return
}
}
panic(errors.New("ValueError: element not found"))
}(&l1, 3)
fmt.Println(l1)
for len(l1) != 0 {
fmt.Println(func(s *[]int) int {
i := len(*s) - 1
popped := (*s)[i]
*s = (*s)[:i]
return popped
}(&l1))
}
l3 = nil
fmt.Println(l3)
sort.Ints(l1)
fmt.Println(l1)
sort.Strings(l2)
fmt.Println(l2)
sort.Float64s(l3)
fmt.Println(l3)
sort.Sort(sort.Reverse(sort.Float64Slice(l3)))
fmt.Println(l3)
func(arr []string) {
for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
arr[i], arr[j] = arr[j], arr[i]
}
}(l2)
fmt.Println(l2)
l4 := func(s *[]string) (tmp []string) {
tmp = append(tmp, *s...)
return
}(&l2)
func(s *[]string) string {
i := len(*s) - 1
popped := (*s)[i]
*s = (*s)[:i]
return popped
}(&l4)
fmt.Println(l4)
fmt.Println(l2)
}
set_methods
Python
def main():
a = {1, 2, 3, 4}
b = {4, 5, 6}
b.add(7)
print(a.union(b))
print(a.intersection(b))
print(a.difference(b))
print(a.symmetric_difference(b))
print(a.issubset(b))
print(a.issuperset(b))
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := map[int]struct{}{1: {}, 2: {}, 3: {}, 4: {}}
b := map[int]struct{}{4: {}, 5: {}, 6: {}}
b[7] = struct{}{}
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) map[interface{}]struct{} {
union := map[interface{}]struct{}{}
for elt := range s1 {
union[elt] = struct{}{}
}
for elt := range s2 {
union[elt] = struct{}{}
}
return union
}(a, b))
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) map[interface{}]struct{} {
intersection := map[interface{}]struct{}{}
for elt := range s1 {
if func() bool {
_, ok := s2[elt]
return ok
}() {
intersection[elt] = struct{}{}
}
}
return intersection
}(a, b))
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) map[interface{}]struct{} {
difference := map[interface{}]struct{}{}
for elt := range s1 {
if !func() bool {
_, ok := s2[elt]
return ok
}() {
difference[elt] = struct{}{}
}
}
return difference
}(a, b))
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) map[interface{}]struct{} {
symmetric_difference := map[interface{}]struct{}{}
for elt := range s1 {
if !func() bool {
_, ok := s2[elt]
return ok
}() {
symmetric_difference[elt] = struct{}{}
}
}
for elt := range s2 {
if !func() bool {
_, ok := s1[elt]
return ok
}() {
symmetric_difference[elt] = struct{}{}
}
}
return symmetric_difference
}(a, b))
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) bool {
for elt := range s1 {
if !func() bool {
_, ok := s2[elt]
return ok
}() {
return false
}
}
return true
}(a, b))
fmt.Println(func(s1 map[int]struct{}, s2 map[int]struct{}) bool {
for elt := range s2 {
if !func() bool {
_, ok := s1[elt]
return ok
}() {
return false
}
}
return true
}(a, b))
}
global_code
Python
A = [1, 2, 3]
for i, x in enumerate(A):
A[i] += x
B = A[0]
C = A[0]
D: int = 3
while C < A[2]:
C += 1
if C == A[2]:
print('True')
def main():
print("Main started")
print(A)
print(B)
print(C)
print(D)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
var (
A = []int{1, 2, 3}
B int
C int
D int
)
func init() {
for i, x := range A {
A[i] += x
}
B = A[0]
C = A[0]
D = 3
for C < A[2] {
C += 1
}
if C == A[2] {
fmt.Println("True")
}
}
func main() {
fmt.Println("Main started")
fmt.Println(A)
fmt.Println(B)
fmt.Println(C)
fmt.Println(D)
}
boolnumcompare
Python
def main():
print(1 == True)
print(1 == False)
print(0 == True)
print(0 == False)
print()
print(1. == True)
print(1. == False)
print(0. == True)
print(0. == False)
print()
print(1+0j == True)
print(1+0j == False)
print(0+0j == True)
print(0+0j == False)
print()
print(2 == True)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
fmt.Println(1 == 1)
fmt.Println(1 == 0)
fmt.Println(0 == 1)
fmt.Println(0 == 0)
fmt.Println()
fmt.Println(1.0 == 1)
fmt.Println(1.0 == 0)
fmt.Println(0.0 == 1)
fmt.Println(0.0 == 0)
fmt.Println()
fmt.Println(1+0.0i == 1)
fmt.Println(1+0.0i == 0)
fmt.Println(0+0.0i == 1)
fmt.Println(0+0.0i == 0)
fmt.Println()
fmt.Println(2 == 1)
}
add
Python
def main():
print(add(2, 2))
def add(a: int, b: int) -> int:
return a + b
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
fmt.Println(add(2, 2))
}
func add(a int, b int) int {
return a + b
}
exponents
Python
def main():
print(2 ** 8)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pow(2, 8))
}
variables
Python
def main():
a = 3
b = 7
a = a + b
print(a + b)
another_scope()
def another_scope():
a = 1
b = 12
a = a + b
print(a + b)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := 3
b := 7
a = a + b
fmt.Println(a + b)
another_scope()
}
func another_scope() {
a := 1
b := 12
a = a + b
fmt.Println(a + b)
}
floats
Python
def main():
a = 7
b = 3
c = 4.5
print(a / b)
print(a // b)
print(a / c)
print(a // c)
print(a + b)
print(a + c)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math"
)
func main() {
a := 7
b := 3
c := 4.5
fmt.Println(float64(a) / float64(b))
fmt.Println(a / b)
fmt.Println(float64(a) / c)
fmt.Println(math.Floor(float64(a) / c))
fmt.Println(a + b)
fmt.Println(float64(a) + c)
}
numlist
Python
def main():
a = [1, 2, 3]
print(a[0])
print(a[1])
print(a[2])
a.append(4)
print(a[3])
a += [5, 6, 7]
a = a + [8, 9, 10]
print(a[4])
print(a[-1])
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
fmt.Println(a[0])
fmt.Println(a[1])
fmt.Println(a[2])
a = append(a, 4)
fmt.Println(a[3])
a = append(a, []int{5, 6, 7}...)
a = append(a, []int{8, 9, 10}...)
fmt.Println(a[4])
fmt.Println(a[len(a)-1])
}
loops
Python
def main():
a = [1, 2, 3]
for v in a:
print(v)
for i, v in enumerate(a):
print(i + v)
for i in range(5):
print(i)
for i in range(10, 15):
print(i)
for i in range(10, 15, 2):
print(i)
for j in range(15, 10, -1):
print(j)
for j in range(15, 10, -2):
print(j)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
for _, v := range a {
fmt.Println(v)
}
for i, v := range a {
fmt.Println(i + v)
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
for i := 10; i < 15; i++ {
fmt.Println(i)
}
for i := 10; i < 15; i += 2 {
fmt.Println(i)
}
for j := 15; j > 10; j-- {
fmt.Println(j)
}
for j := 15; j > 10; j -= 2 {
fmt.Println(j)
}
}
strings
Python
def main():
a = "hello"
b = "world"
c = a + " " + b
print(c)
print(double_it(c))
print(c[1])
print(c[1:6])
def double_it(c: str) -> str:
return c + c
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := "hello"
b := "world"
c := a + " " + b
fmt.Println(c)
fmt.Println(double_it(c))
fmt.Println(string(c[1]))
fmt.Println(c[1:6])
}
func double_it(c string) string {
return c + c
}
logical
Python
def main():
a = True
b = False
print(a)
print(b)
print(a and b)
print(a or b)
print(not a)
print(not b)
print(a and not b)
print(a or not b)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := true
b := false
fmt.Println(a)
fmt.Println(b)
fmt.Println(a && b)
fmt.Println(a || b)
fmt.Println(!a)
fmt.Println(!b)
fmt.Println(a && !b)
fmt.Println(a || !b)
}
maths
Python
import math
def main():
print(math.sin(3))
print(math.cosh(3))
print(math.pi)
print(math.acosh(6))
print(math.atan2(4, 7))
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Sin(3))
fmt.Println(math.Cosh(3))
fmt.Println(math.Pi)
fmt.Println(math.Acosh(6))
fmt.Println(math.Atan2(4, 7))
}
requestslib
Python
import requests
def main():
resp = requests.get("http://tour.golang.org/welcome/1")
print(resp.text)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://tour.golang.org/welcome/1")
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(func() string {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return string(body)
}())
}
conditionals
Python
def main():
a = 7
b = add(a, -2)
if a > b:
print("It's bigger")
elif a == b:
print("They're equal")
else:
print("It's smaller")
def add(a: int, b: int) -> int:
return a + b
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := 7
b := add(a, -2)
if a > b {
fmt.Println("It's bigger")
} else if a == b {
fmt.Println("They're equal")
} else {
fmt.Println("It's smaller")
}
}
func add(a int, b int) int {
return a + b
}
fstrings
Python
def main():
name = "Michael"
age = 24
print(f"My name is {name} and I am {age} years old. Later this year I'll be {age + 1}!")
if __name__ == '__main__':
main()
Go
package main
import (
"bytes"
"fmt"
"text/template"
)
func main() {
name := "Michael"
age := 24
fmt.Println(func() string {
var buf bytes.Buffer
err := template.Must(template.New("f").Parse("My name is {{.name}} and I am {{.age}} years old. Later this year I'll be {{.expr1}}!")).
Execute(&buf, map[string]interface{}{"name": name, "age": age, "expr1": age + 1})
if err != nil {
panic(err)
}
return buf.String()
}())
}
nestedfstrings
Python
def main():
name = "Michael"
age = 24
print(f"My name is {name} and I am {age} years old. Later this year I'll be {f'{age + 1}'}!")
if __name__ == '__main__':
main()
Go
package main
import (
"bytes"
"fmt"
"text/template"
)
func main() {
name := "Michael"
age := 24
fmt.Println(func() string {
var buf bytes.Buffer
err := template.Must(template.New("f").Parse("My name is {{.name}} and I am {{.age}} years old. Later this year I'll be {{.expr1}}!")).
Execute(&buf, map[string]interface{}{"name": name, "age": age, "expr1": func() string {
var buf bytes.Buffer
err := template.Must(template.New("f").Parse("{{.expr1}}")).
Execute(&buf, map[string]interface{}{"expr1": age + 1})
if err != nil {
panic(err)
}
return buf.String()
}()})
if err != nil {
panic(err)
}
return buf.String()
}())
}
dictionary
Python
def main():
a = {"name": "Michael", "age": 24, 1337: True}
print(a)
a["sleepiness"] = 1.0
del a[1337]
for k, v in a.items():
print(k)
print(v)
Go
package main
import "fmt"
func main() {
a := map[interface{}]interface{}{"name": "Michael", "age": 24, 1337: true}
fmt.Println(a)
a["sleepiness"] = 1.0
delete(a, 1337)
for k, v := range a {
fmt.Println(k)
fmt.Println(v)
}
}
writefile
Python
def main():
with open("file_1.tmp", "w+") as f:
f.write("This file was created in w+ mode\n")
with open("file_2.tmp", "x") as f:
f.write("This file was created by x mode\n")
with open("file_2.tmp", "w") as f:
f.write("This file was created by x mode and then overwritten in w mode\n")
with open("file_2.tmp", "a") as f:
f.write("... And then appended to in a mode\n")
with open("file_2.tmp", "r") as f:
print(f.read())
with open("file_3.tmp", "a+") as f:
f.write("This file was created in a+ mode\n")
with open("file_4.tmp", "x+") as f:
f.write("This file was created by x+ mode\n")
with open("file_5.tmp", "wb+") as f:
f.write(b"This file was created in wb+ mode\n")
with open("file_6.tmp", "xb") as f:
f.write(b"This file was created by xb mode\n")
with open("file_6.tmp", "wb") as f:
f.write(b"This file was created by xb mode and then overwritten in wb mode\n")
with open("file_6.tmp", "ab") as f:
f.write(b"... And then appended to in ab mode\n")
with open("file_6.tmp", "rb") as f:
print(f.read().decode())
with open("file_7.tmp", "ab+") as f:
f.write(b"This file was created in ab+ mode\n")
with open("file_8.tmp", "xb+") as f:
f.write(b"This file was created by xb+ mode\n")
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
func() {
f := func() *os.File {
f, err := os.OpenFile("file_1.tmp", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString("This file was created in w+ mode\n")
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_2.tmp", os.O_WRONLY|os.O_EXCL|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString("This file was created by x mode\n")
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_2.tmp", os.O_WRONLY|os.O_TRUNC, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString(
"This file was created by x mode and then overwritten in w mode\n",
)
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_2.tmp", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString("... And then appended to in a mode\n")
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_2.tmp", os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
fmt.Println(func() string {
content, err := ioutil.ReadAll(f)
if err != nil {
panic(err)
}
return string(content)
}())
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_3.tmp", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString("This file was created in a+ mode\n")
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_4.tmp", os.O_RDWR|os.O_EXCL|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.WriteString("This file was created by x+ mode\n")
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_5.tmp", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write([]byte("This file was created in wb+ mode\n"))
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_6.tmp", os.O_WRONLY|os.O_EXCL|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write([]byte("This file was created by xb mode\n"))
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_6.tmp", os.O_WRONLY|os.O_TRUNC, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write(
[]byte("This file was created by xb mode and then overwritten in wb mode\n"),
)
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_6.tmp", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write([]byte("... And then appended to in ab mode\n"))
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_6.tmp", os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
fmt.Println(string(func() []byte {
content, err := ioutil.ReadAll(f)
if err != nil {
panic(err)
}
return content
}()))
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_7.tmp", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write([]byte("This file was created in ab+ mode\n"))
if err != nil {
panic(err)
}
return n
}()
}()
func() {
f := func() *os.File {
f, err := os.OpenFile("file_8.tmp", os.O_RDWR|os.O_EXCL|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
func() int {
n, err := f.Write([]byte("This file was created by xb+ mode\n"))
if err != nil {
panic(err)
}
return n
}()
}()
}
pass
Python
def main():
pass
if __name__ == '__main__':
main()
Go
package main
func main() {
}
ellipsis
Python
def main():
...
if __name__ == '__main__':
main()
Go
package main
func main() {
}
missingreturntype
Python
def main():
print(add(1, 3))
def add(a: int, b: int):
return a + b
Go
package main
import "fmt"
func main() {
fmt.Println(add(1, 3))
}
func add(a int, b int) int {
return a + b
}
continuestmt
Python
def main():
for i in range(10):
if i < 3 or i > 7:
continue
print(i)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i < 3 || i > 7 {
continue
}
fmt.Println(i)
}
}
breakstmt
Python
def main():
for i in range(10):
if i > 7:
break
print(i)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i > 7 {
break
}
fmt.Println(i)
}
}
whileloop
Python
def main():
i = 0
while True:
print(i)
i += 1
if i > 5:
break
j = 10
while j < 100:
print(j)
j += 10
while 1:
print(j + i)
break
while 0.1:
print(j + i)
break
while 0:
print("This never executes")
while 0.0:
print("This never executes")
while None:
print("This never executes")
while False:
print("This never executes")
while "":
print("This never executes")
while "hi":
print("This executes")
break
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
i := 0
for {
fmt.Println(i)
i += 1
if i > 5 {
break
}
}
j := 10
for j < 100 {
fmt.Println(j)
j += 10
}
for {
fmt.Println(j + i)
break
}
for {
fmt.Println(j + i)
break
}
for false {
fmt.Println("This never executes")
}
for false {
fmt.Println("This never executes")
}
for false {
fmt.Println("This never executes")
}
for false {
fmt.Println("This never executes")
}
for false {
fmt.Println("This never executes")
}
for {
fmt.Println("This executes")
break
}
}
sets
Python
def main():
s = {1, 2, 3}
x = 1
print(len(s))
print(x in s)
print(x not in s)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
s := map[int]struct{}{1: {}, 2: {}, 3: {}}
x := 1
fmt.Println(len(s))
fmt.Println(func() bool {
_, ok := s[x]
return ok
}())
fmt.Println(!func() bool {
_, ok := s[x]
return ok
}())
}
contains
Python
def main():
a = [1, 2, 3]
print(1 in a)
print(4 in a)
print(5 not in a)
b = "hello world"
print("hello" in b)
print("Hello" not in b)
c = {"hello": 1, "world": 2}
print("hello" in c)
print("Hello" not in c)
d = b'hello world'
print(b'hello' in d)
print(b'Hello' not in d)
e = {1, 2, 3, "hello"}
print("hello" in e)
print(4 not in e)
if __name__ == '__main__':
main()
Go
package main
import (
"bytes"
"fmt"
"strings"
)
func main() {
a := []int{1, 2, 3}
fmt.Println(func() int {
for i, v := range a {
if v == 1 {
return i
}
}
return -1
}() != -1)
fmt.Println(func() int {
for i, v := range a {
if v == 4 {
return i
}
}
return -1
}() != -1)
fmt.Println(func() int {
for i, v := range a {
if v == 5 {
return i
}
}
return -1
}() == -1)
b := "hello world"
fmt.Println(strings.Contains(b, "hello"))
fmt.Println(!strings.Contains(b, "Hello"))
c := map[string]int{"hello": 1, "world": 2}
fmt.Println(func() bool {
_, ok := c["hello"]
return ok
}())
fmt.Println(!func() bool {
_, ok := c["Hello"]
return ok
}())
d := []byte("hello world")
fmt.Println(bytes.Contains(d, []byte("hello")))
fmt.Println(!bytes.Contains(d, []byte("Hello")))
e := map[interface{}]struct{}{1: {}, 2: {}, 3: {}, "hello": {}}
fmt.Println(func() bool {
_, ok := e["hello"]
return ok
}())
fmt.Println(!func() bool {
_, ok := e[4]
return ok
}())
}
tryexcept
Python
def main():
a = [1, 2, 3]
for index in range(4):
try:
print(a[index])
if index == 1:
raise ValueError(index)
except IndexError:
print("That index was out of bounds")
except (NotImplementedError, RuntimeError):
print("This won't actually happen...")
except Exception as e:
print("Some other exception occurred")
print(e)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"strings"
)
func main() {
a := []int{1, 2, 3}
for index := 0; index < 4; index++ {
func() {
defer func() {
if r := recover(); r != nil {
if err, ok := r.(error); ok {
if strings.HasPrefix(err.Error(), "IndexError") ||
strings.HasPrefix(err.Error(), "runtime error: index out of range") {
fmt.Println("That index was out of bounds")
return
} else if strings.HasPrefix(err.Error(), "NotImplementedError") || (strings.HasPrefix(err.Error(), "RuntimeError") || strings.HasPrefix(err.Error(), "runtime error")) {
fmt.Println("This won't actually happen...")
return
} else {
e := err
fmt.Println("Some other exception occurred")
fmt.Println(e)
return
}
}
panic(r)
}
}()
fmt.Println(a[index])
if index == 1 {
panic(fmt.Errorf("ValueError: %v", index))
}
}()
}
}
tryfinally
Python
def main():
a = [1, 2, 3]
for index in range(4):
try:
print(a[index])
except Exception:
pass
finally:
print("Finished an iteration")
for index in range(4):
try:
print(a[index])
finally:
print("Finished an iteration")
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
for index := 0; index < 4; index++ {
func() {
defer func() {
fmt.Println("Finished an iteration")
}()
defer func() {
if r := recover(); r != nil {
if _, ok := r.(error); ok {
return
}
panic(r)
}
}()
fmt.Println(a[index])
}()
}
for index := 0; index < 4; index++ {
func() {
defer func() {
fmt.Println("Finished an iteration")
}()
fmt.Println(a[index])
}()
}
}
asserts
Python
def main():
assert 1 + 1 == 2
assert True
assert 1 + 3 == 5, "Math must be broken"
if __name__ == '__main__':
main()
Go
package main
import (
"errors"
"fmt"
)
func main() {
if !(1+1 == 2) {
panic(errors.New("AssertionError"))
}
if !true {
panic(errors.New("AssertionError"))
}
if !(1+3 == 5) {
panic(fmt.Errorf("AssertionError: %v", "Math must be broken"))
}
}
classes
Python
class Welcome:
greeting: str
instructions: list[str]
def __init__(self, greeting: str, instructions: list[str]) -> None:
self.greeting = greeting
self.instructions = instructions
def greet(self):
print(self.greeting)
for instruction in self.instructions:
print(instruction)
def main():
welcome = Welcome("Hello World", [
"This is a class!",
"Support will be limited at first.",
"Still, I hope you'll find them useful."
])
welcome.greet()
if __name__ == '__main__':
main()
Go
package main
import "fmt"
type Welcome struct {
greeting string
instructions []string
}
func NewWelcome(greeting string, instructions []string) (self *Welcome) {
self = new(Welcome)
self.greeting = greeting
self.instructions = instructions
return
}
func (self *Welcome) greet() {
fmt.Println(self.greeting)
for _, instruction := range self.instructions {
fmt.Println(instruction)
}
}
func main() {
welcome := NewWelcome(
"Hello World",
[]string{
"This is a class!",
"Support will be limited at first.",
"Still, I hope you'll find them useful.",
},
)
welcome.greet()
}
globals
Python
SITE = "https://www.google.com/"
NAME = ["Michael", "Wayne", "Phelps"]
KEYS = {1: 2, 3: 4}
AGE = 1000
BIRTH_YEAR = 2050
def main():
global AGE
print(SITE)
print(NAME)
print(BIRTH_YEAR)
print(KEYS)
print(AGE)
AGE = 20 # This should use the variable from the global scope
other_1()
print(AGE)
other_2()
def other_1():
AGE = 200 # This should declare a new variable age
print(AGE)
def other_2():
print(AGE) # This should still be able to access the global
if __name__ == '__main__':
main()
Go
package main
import "fmt"
var (
SITE = "https://www.google.com/"
NAME = []string{"Michael", "Wayne", "Phelps"}
KEYS = map[int]int{1: 2, 3: 4}
AGE = 1000
BIRTH_YEAR = 2050
)
func main() {
fmt.Println(SITE)
fmt.Println(NAME)
fmt.Println(BIRTH_YEAR)
fmt.Println(KEYS)
fmt.Println(AGE)
AGE = 20
other_1()
fmt.Println(AGE)
other_2()
}
func other_1() {
AGE := 200
fmt.Println(AGE)
}
func other_2() {
fmt.Println(AGE)
}
asyncawait
Python
import asyncio
async def myAsyncFunction() -> int:
await asyncio.sleep(2)
return 2
async def main():
r = await myAsyncFunction()
print(r)
if __name__ == '__main__':
asyncio.run(main())
Go
package main
import (
"fmt"
"time"
)
func myAsyncFunction() <-chan int {
r := make(chan int)
go func() {
defer close(r)
time.Sleep(time.Second * 2)
r <- 2
}()
return r
}
func main() {
r := <-myAsyncFunction()
fmt.Println(r)
}
yields
Python
def main():
my_gen = gen()
for x in my_gen:
print("Received next number!")
print(x)
def gen():
print("Yielding next number...")
yield 1
print("Yielding next number...")
yield 2
print("Yielding next number...")
yield 3
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
my_gen := gen()
for x, ok := <-my_gen(); ok; x, ok = <-my_gen() {
fmt.Println("Received next number!")
fmt.Println(x)
}
}
func gen() func() <-chan int {
wait := make(chan struct{})
yield := make(chan int)
go func() {
defer close(yield)
<-wait
fmt.Println("Yielding next number...")
yield <- 1
<-wait
fmt.Println("Yielding next number...")
yield <- 2
<-wait
fmt.Println("Yielding next number...")
yield <- 3
<-wait
}()
return func() <-chan int {
wait <- struct{}{}
return yield
}
}
isvseql
Python
def main():
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
print(a != b) # False
print(a is a) # True
print(a is b) # False
print(a is not a) # False
print(a is not b) # True
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"reflect"
)
func main() {
a := []int{1, 2, 3}
b := []int{1, 2, 3}
fmt.Println(reflect.DeepEqual(a, b))
fmt.Println(!reflect.DeepEqual(a, b))
fmt.Println(&a == &a)
fmt.Println(&a == &b)
fmt.Println(&a != &a)
fmt.Println(&a != &b)
}
matchcase
Python
def main():
a = 1
match a:
case 1:
print(1)
case 2:
print(2)
case 3:
print(3)
match a:
case 4:
print("Never gonna happen")
case _:
print("Nice, defaults!")
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := 1
switch a {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
case 3:
fmt.Println(3)
}
switch a {
case 4:
fmt.Println("Never gonna happen")
default:
fmt.Println("Nice, defaults!")
}
}
defaultargs
Python
def main():
a = increment(1)
print(a)
b = increment(a, 2)
print(b)
c = increment(a, decrement=True, amount=3)
print(c)
def increment(n: int, amount: int = 1, decrement: bool = False) -> int:
if decrement:
return n - amount
return n + amount
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := increment(1, 1, false)
fmt.Println(a)
b := increment(a, 2, false)
fmt.Println(b)
c := increment(a, 3, true)
fmt.Println(c)
}
func increment(n int, amount int, decrement bool) int {
if decrement {
return n - amount
}
return n + amount
}
walrus
Python
def main():
if (a := some_func()) == 7:
print(a)
for x in (y := [1, 2, 3]):
print(y)
print(x)
match j := 5:
case 5:
print(j)
while (t1 := thing_1()) < 5 and (t2 := thing_2()) == 3:
print(t1)
print(t2)
def some_func():
return 7
call_count = 0
def thing_1():
global call_count
call_count += 1
return call_count
def thing_2():
return 3
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
if a := some_func(); a == 7 {
fmt.Println(a)
}
y := []int{1, 2, 3}
for _, x := range y {
fmt.Println(y)
fmt.Println(x)
}
switch j := 5; j {
case 5:
fmt.Println(j)
}
for t1, t2 := thing_1(), thing_2(); t1 < 5 && t2 == 3; t1, t2 = thing_1(), thing_2() {
fmt.Println(t1)
fmt.Println(t2)
}
}
func some_func() int {
return 7
}
var call_count = 0
func thing_1() int {
call_count += 1
return call_count
}
func thing_2() int {
return 3
}
truthiness
Python
def main():
if a := 1:
print(a)
if c := "":
print(c)
if d := b"":
print(d)
if e := "Hello":
print(e)
if f := b"Goodbye":
print(f)
if g := 1.0:
print(g)
if h := 1j:
print(h)
if i := 0.0:
print(i)
if j := 0j:
print(j)
if k := []:
print(k)
if l := [1, 2, 3]:
print(l)
if m := True:
print(m)
if n := False:
print(n)
if o := ():
print(o)
if p := (1, 2, 3):
print(p)
if q := set():
print(q)
if r := {1, 2, 3}:
print(r)
if s := {}:
print(s)
if t := {1: 2}:
print(t)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
if a := 1; a != 0 {
fmt.Println(a)
}
if c := ""; len(c) != 0 {
fmt.Println(c)
}
if d := []byte(""); len(d) != 0 {
fmt.Println(d)
}
if e := "Hello"; len(e) != 0 {
fmt.Println(e)
}
if f := []byte("Goodbye"); len(f) != 0 {
fmt.Println(f)
}
if g := 1.0; g != 0 {
fmt.Println(g)
}
if h := 1.0i; h != 0 {
fmt.Println(h)
}
if i := 0.0; i != 0 {
fmt.Println(i)
}
if j := 0.0i; j != 0 {
fmt.Println(j)
}
if k := []interface{}{}; len(k) != 0 {
fmt.Println(k)
}
if l := []int{1, 2, 3}; len(l) != 0 {
fmt.Println(l)
}
if m := true; m {
fmt.Println(m)
}
if n := false; n {
fmt.Println(n)
}
if o := [0]interface{}{}; len(o) != 0 {
fmt.Println(o)
}
if p := [3]int{1, 2, 3}; len(p) != 0 {
fmt.Println(p)
}
if q := map[interface{}]struct{}{}; len(q) != 0 {
fmt.Println(q)
}
if r := map[int]struct{}{1: {}, 2: {}, 3: {}}; len(r) != 0 {
fmt.Println(r)
}
if s := map[interface{}]interface{}{}; len(s) != 0 {
fmt.Println(s)
}
if t := map[int]int{1: 2}; len(t) != 0 {
fmt.Println(t)
}
}
minmax
Python
def main():
print(max([1, 2, 3]))
print(min([1, 2, 3]))
print(max("a", "b", "c"))
print(min("a", "b", "c"))
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
fmt.Println(func() (m int) {
for i, e := range []int{1, 2, 3} {
if i == 0 || e > m {
m = e
}
}
return
}())
fmt.Println(func() (m int) {
for i, e := range []int{1, 2, 3} {
if i == 0 || e < m {
m = e
}
}
return
}())
fmt.Println(func() (m string) {
for i, e := range []string{"a", "b", "c"} {
if i == 0 || e > m {
m = e
}
}
return
}())
fmt.Println(func() (m string) {
for i, e := range []string{"a", "b", "c"} {
if i == 0 || e < m {
m = e
}
}
return
}())
}
sum
Python
def main():
print(sum([1, 2, 3]))
print(sum([1.5, 2.6, 3.7]))
print(sum([1j, 2j, 3j]))
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
fmt.Println(func() (s int) {
for _, e := range []int{1, 2, 3} {
s += e
}
return
}())
fmt.Println(func() (s float64) {
for _, e := range []float64{1.5, 2.6, 3.7} {
s += e
}
return
}())
fmt.Println(func() (s complex128) {
for _, e := range []complex128{1.0i, 2.0i, 3.0i} {
s += e
}
return
}())
}
reverse
Python
def main():
a = [1, 2, 3, 4, 5]
for x in reversed(a):
print(x)
for x in a:
print(x)
a.reverse()
for x in a:
print(x)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3, 4, 5}
for _, x := range func(arr []int) []int {
arr2 := make([]int, len(arr))
for i, e := range arr {
arr2[len(arr)-i-1] = e
}
return arr2
}(a) {
fmt.Println(x)
}
for _, x := range a {
fmt.Println(x)
}
func(arr []int) {
for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
arr[i], arr[j] = arr[j], arr[i]
}
}(a)
for _, x := range a {
fmt.Println(x)
}
}
listcomp
Python
def main():
a = [x for x in range(10)]
b = [x for x in range(10) if x % 2 == 0]
c = [x if x % 2 == 0 else 777 for x in range(10)]
d = [x for i, x in enumerate(c) if i % 2 == 0 if i % 3 == 1]
e = [(x, y) for x in c for y in d]
f = [(x, y) for x in c for y in next_five_numbers_times_two(x)]
g = [(i, j) for i in range(10) for j in range(i)]
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
def next_five_numbers_times_two(a: int) -> list[int]:
return [(a + i) * 2 for i in range(1, 6)]
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := func() (elts []int) {
for x := 0; x < 10; x++ {
elts = append(elts, x)
}
return
}()
b := func() (elts []int) {
for x := 0; x < 10; x++ {
if x%2 == 0 {
elts = append(elts, x)
}
}
return
}()
c := func() (elts []int) {
for x := 0; x < 10; x++ {
elts = append(elts, func() int {
if x%2 == 0 {
return x
}
return 777
}())
}
return
}()
d := func() (elts []int) {
for i, x := range c {
if i%2 == 0 {
if i%3 == 1 {
elts = append(elts, x)
}
}
}
return
}()
e := func() (elts [][2]int) {
for _, x := range c {
for _, y := range d {
elts = append(elts, [2]int{x, y})
}
}
return
}()
f := func() (elts [][2]int) {
for _, x := range c {
for _, y := range next_five_numbers_times_two(x) {
elts = append(elts, [2]int{x, y})
}
}
return
}()
g := func() (elts [][2]int) {
for i := 0; i < 10; i++ {
for j := 0; j < i; j++ {
elts = append(elts, [2]int{i, j})
}
}
return
}()
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
fmt.Println(f)
fmt.Println(g)
}
func next_five_numbers_times_two(a int) []int {
return func() (elts []int) {
for i := 1; i < 6; i++ {
elts = append(elts, (a+i)*2)
}
return
}()
}
dictcomp
Python
def main():
a = {(x, y): x*y for x in range(20) for y in range(5) if x*y != 0}
for k, v in a.items():
print(k, v)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := func() (d map[[2]int]int) {
d = make(map[[2]int]int)
for x := 0; x < 20; x++ {
for y := 0; y < 5; y++ {
if x*y != 0 {
d[[2]int{x, y}] = x * y
}
}
}
return
}()
for k, v := range a {
fmt.Println(k, v)
}
}
setcomp
Python
def main():
a = {x for x in range(20, 39)}
b = {(x, y) for x in range(100) for y in range(x, x + 5) if x % 39 in a}
print(a)
print(b)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := func() (s map[int]struct{}) {
s = make(map[int]struct{})
for x := 20; x < 39; x++ {
s[x] = struct{}{}
}
return
}()
b := func() (s map[[2]int]struct{}) {
s = make(map[[2]int]struct{})
for x := 0; x < 100; x++ {
for y := x; y < x+5; y++ {
if func() bool {
_, ok := a[x%39]
return ok
}() {
s[[2]int{x, y}] = struct{}{}
}
}
}
return
}()
fmt.Println(a)
fmt.Println(b)
}
generatorexp
Python
def main():
a = ((x, y) for x in range(5) for y in range(x))
b = (w for w in ("Where", "Are", "You?", "And", "I'm", "So", "Sorry"))
for l in b:
print(l, next(a))
for rest in a:
print(rest)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := func() func() <-chan [2]int {
wait := make(chan struct{})
yield := make(chan [2]int)
go func() {
defer close(yield)
<-wait
for x := 0; x < 5; x++ {
for y := 0; y < x; y++ {
yield <- [2]int{x, y}
<-wait
}
}
}()
return func() <-chan [2]int {
wait <- struct{}{}
return yield
}
}()
b := func() func() <-chan string {
wait := make(chan struct{})
yield := make(chan string)
go func() {
defer close(yield)
<-wait
for _, w := range [7]string{"Where", "Are", "You?", "And", "I'm", "So", "Sorry"} {
yield <- w
<-wait
}
}()
return func() <-chan string {
wait <- struct{}{}
return yield
}
}()
for l, ok := <-b(); ok; l, ok = <-b() {
fmt.Println(l, <-a())
}
for rest, ok := <-a(); ok; rest, ok = <-a() {
fmt.Println(rest)
}
}
ternary
Python
def main():
a = 1 if True else 2
print(a)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := func() int {
if true {
return 1
}
return 2
}()
fmt.Println(a)
}
isinstance
Python
def main():
a = ["a", 1, "5", 2.3, 1.2j]
some_condition = True
for x in a:
if isinstance(x, (str, float)):
print("String or float!")
elif isinstance(x, int):
print("Integer!")
else:
print("Dunno!")
print(":)")
if isinstance(x, str) and some_condition:
print("String")
elif isinstance(x, int):
print("Integer!")
else:
print("Dunno!!")
print(":O")
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []interface{}{"a", 1, "5", 2.3, 1.2i}
some_condition := true
for _, x := range a {
switch x.(type) {
case string, float64:
fmt.Println("String or float!")
case int:
fmt.Println("Integer!")
default:
fmt.Println("Dunno!")
fmt.Println(":)")
}
if func() bool {
switch x.(type) {
case string:
return true
}
return false
}() && some_condition {
fmt.Println("String")
} else {
switch x.(type) {
case int:
fmt.Println("Integer!")
default:
fmt.Println("Dunno!!")
fmt.Println(":O")
}
}
}
}
zip
Python
def main():
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
for pair in zipped:
print(pair)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
x := []int{1, 2, 3}
y := []int{4, 5, 6}
zipped := func() func() <-chan [2]int {
wait := make(chan struct{})
yield := make(chan [2]int)
go func() {
defer close(yield)
<-wait
for i, e := range x {
if i >= len(y) {
break
}
yield <- [2]int{e, y[i]}
<-wait
}
}()
return func() <-chan [2]int {
wait <- struct{}{}
return yield
}
}()
for pair, ok := <-zipped(); ok; pair, ok = <-zipped() {
fmt.Println(pair)
}
}
map
Python
def main():
a = [1, 2, 3]
b = map(increment, a)
for value in b:
print(value)
def increment(n: int) -> int:
return n + 1
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
b := func() func() <-chan int {
wait := make(chan struct{})
yield := make(chan int)
go func() {
defer close(yield)
<-wait
for _, x := range a {
yield <- increment(x)
<-wait
}
}()
return func() <-chan int {
wait <- struct{}{}
return yield
}
}()
for value, ok := <-b(); ok; value, ok = <-b() {
fmt.Println(value)
}
}
func increment(n int) int {
return n + 1
}
repr
Python
def main():
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
s = repr(nums)
print(s + s)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
s := fmt.Sprintf("%#v", nums)
fmt.Println(s + s)
}
lambdafunc
Python
def main():
f = lambda x: x * 2
for a in range(10):
print((lambda x: x + 1)(a) + f(a))
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
f := func(x int) int {
return int(x) * 2
}
for a := 0; a < 10; a++ {
fmt.Println(func(x int) int {
return int(x) + 1
}(a) + f(a))
}
}
timemodule
Python
import time
def main():
print("Hello")
time.sleep(3)
print("... time!")
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello")
time.Sleep(3 * time.Second)
fmt.Println("... time!")
}
exit
Python
import sys
def main():
quit()
quit(1)
exit()
exit(1)
sys.exit()
sys.exit(1)
if __name__ == '__main__':
main()
Go
package main
import "os"
func main() {
os.Exit(0)
os.Exit(1)
os.Exit(0)
os.Exit(1)
os.Exit(0)
os.Exit(1)
}
retroactive_composite_types
Python
def main():
a = []
a.append(3)
b = []
b += a
c = {}
c["hello"] = 1
d = {}
d[1] = 2
d["gonna_be_an_interface"] = "yup"
e = set()
e.add(1)
f = [[]]
f[0].append(1)
g = {}
g[(1, 2)] = 3
h = []
h.append(1)
h.append("hi")
i = {}
i[1] = "lol"
i["2"] = "lmao"
print(a, b, c, d, e, f, g, h)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
a := []int{}
a = append(a, 3)
b := []int{}
b = append(b, a...)
c := map[string]int{}
c["hello"] = 1
d := map[interface{}]interface{}{}
d[1] = 2
d["gonna_be_an_interface"] = "yup"
e := map[int]struct{}{}
e[1] = struct{}{}
f := [][]int{{}}
f[0] = append(f[0], 1)
g := map[[2]int]int{}
g[[2]int{1, 2}] = 3
h := []interface{}{}
h = append(h, 1)
h = append(h, "hi")
i := map[interface{}]string{}
i[1] = "lol"
i["2"] = "lmao"
fmt.Println(a, b, c, d, e, f, g, h)
}
isinstance_gives_type_assertion
Python
def main():
stuff = [1, 5, "hello", 5, 12, 19, 12.5, [1, 2, 3]]
write_contents(stuff)
items = ["", 0, 1.1]
for x in items:
if isinstance(x, str):
print("See? It's not used here so we don't have a type assertion")
elif isinstance(x, int):
print("This is very important because go's compiler will complain")
else:
print("You know, I wouldn't have to worry about this if we had something to remove unused initializations")
def write_contents(contents):
with open("contents.txt", "w+") as f:
for item in contents:
if isinstance(item, str):
f.write("str: " + item + "\n")
elif isinstance(item, int):
f.write("int: " + str(item) + "\n")
else:
f.write("unknown: " + repr(item) + "\n")
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"os"
)
func main() {
stuff := []interface{}{1, 5, "hello", 5, 12, 19, 12.5, []int{1, 2, 3}}
write_contents(stuff)
items := []interface{}{"", 0, 1.1}
for _, x := range items {
switch x.(type) {
case string:
fmt.Println("See? It's not used here so we don't have a type assertion")
case int:
fmt.Println("This is very important because go's compiler will complain")
default:
fmt.Println("You know, I wouldn't have to worry about this if we had something to remove unused initializations")
}
}
}
func write_contents(contents []interface{}) {
f := func() *os.File {
f, err := os.OpenFile("contents.txt", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := f.Close(); err != nil {
panic(err)
}
}()
for _, item := range contents {
switch item := item.(type) {
case string:
func() int {
n, err := f.WriteString("str: " + item + "\n")
if err != nil {
panic(err)
}
return n
}()
case int:
func() int {
n, err := f.WriteString("int: " + fmt.Sprintf("%v", item) + "\n")
if err != nil {
panic(err)
}
return n
}()
default:
func() int {
n, err := f.WriteString("unknown: " + fmt.Sprintf("%#v", item) + "\n")
if err != nil {
panic(err)
}
return n
}()
}
}
}
fileloop
Python
def main():
fh = open("file.txt")
for line in fh:
print(line)
fh.close()
with open("file2.txt") as fh2:
for line in fh2:
print(line)
with open("file3.txt", "rb") as fh3:
for l in fh3:
print(l)
if __name__ == '__main__':
main()
Go
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
fh := func() *os.File {
f, err := os.OpenFile("file.txt", os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
if sc, line, err := bufio.NewReader(fh), "", *new(error); true {
for {
line, err = sc.ReadString('\n')
if err != nil && (err == io.EOF && len(line) == 0 || err != io.EOF) {
break
}
fmt.Println(line)
}
if err != io.EOF {
panic(err)
}
}
if err := fh.Close(); err != nil {
panic(err)
}
func() {
fh2 := func() *os.File {
f, err := os.OpenFile("file2.txt", os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := fh2.Close(); err != nil {
panic(err)
}
}()
if sc, line, err := bufio.NewReader(fh2), "", *new(error); true {
for {
line, err = sc.ReadString('\n')
if err != nil && (err == io.EOF && len(line) == 0 || err != io.EOF) {
break
}
fmt.Println(line)
}
if err != io.EOF {
panic(err)
}
}
}()
func() {
fh3 := func() *os.File {
f, err := os.OpenFile("file3.txt", os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := fh3.Close(); err != nil {
panic(err)
}
}()
if sc, l, err := bufio.NewReader(fh3), []byte{}, *new(error); true {
for {
l, err = sc.ReadBytes('\n')
if err != nil && (err == io.EOF && len(l) == 0 || err != io.EOF) {
break
}
fmt.Println(l)
}
if err != io.EOF {
panic(err)
}
}
}()
}
unpacking
Python
def main():
name = "Michael Wayne Phelps"
first, middle, last = name.split()
x = [1, 2, 3]
a, b, c = x
d, e, f = 4, 5, 6
g, h, i = [7, 8, 9]
print(first, middle, last, a, b, c, d, e, f, g, h, i)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"strings"
)
func main() {
name := "Michael Wayne Phelps"
first, middle, last := func(s []string) (string, string, string) {
return s[0], s[1], s[2]
}(strings.Fields(name))
x := []int{1, 2, 3}
a, b, c := x[0], x[1], x[2]
d, e, f := 4, 5, 6
g, h, i := 7, 8, 9
fmt.Println(first, middle, last, a, b, c, d, e, f, g, h, i)
}
cast_to_float
Python
def main():
num1 = input('Enter first number: ')
num2 = input('Enter second number: ')
sum = float(num1) + float(num2)
print("The sum of", num1, "and", num2, "is", sum)
if __name__ == '__main__':
main()
Go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
num1 := func(msg string) string {
fmt.Print(msg)
text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
return strings.ReplaceAll(text, "\n", "")
}("Enter first number: ")
num2 := func(msg string) string {
fmt.Print(msg)
text, _ := bufio.NewReader(os.Stdin).ReadString('\n')
return strings.ReplaceAll(text, "\n", "")
}("Enter second number: ")
sum := func() float64 {
i, err := strconv.ParseFloat(num1, 64)
if err != nil {
panic(err)
}
return i
}() + func() float64 {
i, err := strconv.ParseFloat(num2, 64)
if err != nil {
panic(err)
}
return i
}()
fmt.Println("The sum of", num1, "and", num2, "is", sum)
}
jsondump
Python
import json
import random
def main():
print(json.dumps(1))
print(json.dumps("hello"))
c = json.dumps({"hello": 1, "how": "are you"})
print(c + c)
print(json.dumps([1, 2, 3]))
if __name__ == '__main__':
main()
Go
package main
import (
"encoding/json"
"fmt"
)
func main() {
fmt.Println(func() string {
b, err := json.Marshal(1)
if err != nil {
panic(err)
}
return string(b)
}())
fmt.Println(func() string {
b, err := json.Marshal("hello")
if err != nil {
panic(err)
}
return string(b)
}())
c := func() string {
b, err := json.Marshal(map[string]interface{}{"hello": 1, "how": "are you"})
if err != nil {
panic(err)
}
return string(b)
}()
fmt.Println(c + c)
fmt.Println(func() string {
b, err := json.Marshal([]int{1, 2, 3})
if err != nil {
panic(err)
}
return string(b)
}())
}
strdunder
Python
class A:
a: str
def __init__(self, val):
self.a = val
def __str__(self):
return self.a
def main():
val = A("ok")
print(val)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
type A struct {
a string
}
func NewA(val string) (self *A) {
self = new(A)
self.a = val
return
}
func (self *A) String() string {
return self.a
}
func main() {
val := NewA("ok")
fmt.Println(val)
}
globfiles
Python
import glob
def main():
for py_file in glob.glob("./*.py"):
print("=" * 20, py_file, "=" * 20)
with open(py_file) as py_f:
for line in py_f:
print(line.rstrip())
if __name__ == '__main__':
main()
Go
package main
import (
"bufio"
"fmt"
"io"
"os"
"path/filepath"
"strings"
"unicode"
)
func main() {
for _, py_file := range func(pattern string) []string {
matches, err := filepath.Glob(pattern)
if err != nil {
panic(err)
}
return matches
}("./*.py") {
fmt.Println(strings.Repeat("=", 20), py_file, strings.Repeat("=", 20))
func() {
py_f := func() *os.File {
f, err := os.OpenFile(py_file, os.O_RDONLY, 0o777)
if err != nil {
panic(err)
}
return f
}()
defer func() {
if err := py_f.Close(); err != nil {
panic(err)
}
}()
if sc, line, err := bufio.NewReader(py_f), "", *new(error); true {
for {
line, err = sc.ReadString('\n')
if err != nil && (err == io.EOF && len(line) == 0 || err != io.EOF) {
break
}
fmt.Println(strings.TrimRightFunc(line, unicode.IsSpace))
}
if err != io.EOF {
panic(err)
}
}
}()
}
}
stringmultiply
Python
def main():
s = "1, 2, 3, 4"
x = s * 5
y = str({1, 2, 3, 4}) * 6
z = str([1, 2, 3, 4]) * 7
a = str({1: 2, 3: 4}) * 8
b = str((1, 2, 3, 4)) * 9
c = "1, 2, 3, 4" * 10
d = " 1, 2, 3, 4 ".strip() * 11
print(x, y, z, a, b, c, d)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"strings"
)
func main() {
s := "1, 2, 3, 4"
x := strings.Repeat(s, 5)
y := strings.Repeat(fmt.Sprintf("%v", map[interface{}]struct{}{1: {}, 2: {}, 3: {}, 4: {}}), 6)
z := strings.Repeat(fmt.Sprintf("%v", []int{1, 2, 3, 4}), 7)
a := strings.Repeat(fmt.Sprintf("%v", map[interface{}]interface{}{1: 2, 3: 4}), 8)
b := strings.Repeat(fmt.Sprintf("%v", [4]int{1, 2, 3, 4}), 9)
c := strings.Repeat("1, 2, 3, 4", 10)
d := strings.Repeat(strings.TrimSpace(" 1, 2, 3, 4 "), 11)
fmt.Println(x, y, z, a, b, c, d)
}
scope
Python
import random
def main():
if random.random() > 0.5:
a = 1
else:
a = 2
if random.random() > 0.5:
if random.random() > 0.5:
b = 1
else:
b = 2
else:
b = 3
def hello_world():
c = 3
print(c)
hello_world()
print(a, b)
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math/rand"
"time"
)
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
var a int
var b int
if rand.Float64() > 0.5 {
a = 1
} else {
a = 2
}
if rand.Float64() > 0.5 {
if rand.Float64() > 0.5 {
b = 1
} else {
b = 2
}
} else {
b = 3
}
hello_world := func() {
c := 3
fmt.Println(c)
}
hello_world()
fmt.Println(a, b)
}
forelse
Python
def main():
for x in range(4):
if x == 5:
break
else:
print("Well of course that didn't happen")
for x in range(7):
if x == 5:
break
else:
print("H-hey wait!")
i = 0
while i < 3:
print("Works with while too")
for x in range(3):
print("BTW don't worry about nested breaks")
break
if i == 10:
break
i += 1
else:
print("Yeah not likely")
print(i)
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func main() {
var x int
if func() bool {
for x = 0; x < 4; x++ {
if x == 5 {
return false
}
}
return true
}() {
fmt.Println("Well of course that didn't happen")
}
if func() bool {
for x = 0; x < 7; x++ {
if x == 5 {
return false
}
}
return true
}() {
fmt.Println("H-hey wait!")
}
i := 0
if func() bool {
for i < 3 {
fmt.Println("Works with while too")
for x = 0; x < 3; x++ {
fmt.Println("BTW don't worry about nested breaks")
break
}
if i == 10 {
return false
}
i += 1
}
return true
}() {
fmt.Println("Yeah not likely")
}
fmt.Println(i)
}
algomajorityelement
Python
def majorityElement(nums: list[int]) -> int:
element, cnt = 0, 0
for e in nums:
if element == e:
cnt += 1
elif cnt == 0:
element, cnt = e, 1
else:
cnt -= 1
return element
def main():
print(majorityElement([3,2,3])) # 3
print(majorityElement([2,2,1,1,1,2,2])) # 2
if __name__ == '__main__':
main()
Go
package main
import "fmt"
func majorityElement(nums []int) int {
element, cnt := 0, 0
for _, e := range nums {
if element == e {
cnt += 1
} else if cnt == 0 {
element, cnt = e, 1
} else {
cnt -= 1
}
}
return element
}
func main() {
fmt.Println(majorityElement([]int{3, 2, 3}))
fmt.Println(majorityElement([]int{2, 2, 1, 1, 1, 2, 2}))
}
algobisection
Python
def bisection(function, a: float, b: float) -> float:
start = a
end = b
if function(a) == 0: # one of the a or b is a root for the function
return a
elif function(b) == 0:
return b
elif (
function(a) * function(b) > 0
): # if none of these are root and they are both positive or negative,
raise ValueError("could not find root in given interval.")
else:
mid = start + (end - start) / 2.0
while abs(start - mid) > 10 ** -7: # until precisely equals to 10^-7
if function(mid) == 0:
return mid
elif function(mid) * function(start) < 0:
end = mid
else:
start = mid
mid = start + (end - start) / 2.0
return mid
def f(x: float):
return x ** 3 - 2 * x - 5
def main():
print(bisection(f, 1, 1000))
Go
package main
import (
"fmt"
"math"
)
func bisection(function func(x float64) float64, a float64, b float64) float64 {
start := a
end := b
if function(a) == 0 {
return a
} else if function(b) == 0 {
return b
} else if function(a)*function(b) > 0 {
panic(fmt.Errorf("ValueError: %v", "could not find root in given interval."))
} else {
mid := start + (end-start)/2.0
for math.Abs(start-mid) > math.Pow(10, -7) {
if function(mid) == 0 {
return mid
} else if function(mid)*function(start) < 0 {
end = mid
} else {
start = mid
}
mid = start + (end-start)/2.0
}
return mid
}
}
func f(x float64) float64 {
return math.Pow(x, 3) - float64(2*x) - 5
}
func main() {
fmt.Println(bisection(f, 1, 1000))
}
algointersection
Python
import math
def intersection(function, x0: float, x1: float) -> float:
x_n = x0
x_n1 = x1
while True:
if x_n == x_n1 or function(x_n1) == function(x_n):
raise ZeroDivisionError("float division by zero, could not find root")
x_n2 = x_n1 - (
function(x_n1) / ((function(x_n1) - function(x_n)) / (x_n1 - x_n))
)
if abs(x_n2 - x_n1) < 10 ** -5:
return x_n2
x_n = x_n1
x_n1 = x_n2
def f(x: float) -> float:
return math.pow(x, 3) - (2 * x) - 5
def main():
print(intersection(f, 3, 3.5))
if __name__ == '__main__':
main()
Go
package main
import (
"fmt"
"math"
)
func intersection(function func(x float64) float64, x0 float64, x1 float64) float64 {
x_n := x0
x_n1 := x1
for {
if x_n == x_n1 || function(x_n1) == function(x_n) {
panic(
fmt.Errorf("ZeroDivisionError: %v", "float division by zero, could not find root"),
)
}
x_n2 := x_n1 - function(x_n1)/((function(x_n1)-function(x_n))/(x_n1-x_n))
if math.Abs(x_n2-x_n1) < math.Pow(10, -5) {
return x_n2
}
x_n = x_n1
x_n1 = x_n2
}
}
func f(x float64) float64 {
return math.Pow(x, 3) - float64(2*x) - 5
}
func main() {
fmt.Println(intersection(f, 3, 3.5))
}
index
Python
def main():
x = [1, 2, 3, 7, 3]
print(x.index(7))
if __name__ == '__main__':
main()
Go
package main
import (
"errors"
"fmt"
)
func main() {
x := []int{1, 2, 3, 7, 3}
fmt.Println(func() int {
for i, val := range x {
if val == 7 {
return i
}
}
panic(errors.New("ValueError"))
}())
}
TODOs
Some things I'd like to add soon...
- "value in range(start, stop, step)" => a conditional statement
- Exhaustive implementation of list/dict/int/float/bytes methods
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytago-0.0.12.tar.gz
(106.8 kB
view details)
Built Distribution
pytago-0.0.12-py3-none-any.whl
(77.9 kB
view details)
File details
Details for the file pytago-0.0.12.tar.gz
.
File metadata
- Download URL: pytago-0.0.12.tar.gz
- Upload date:
- Size: 106.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.10.0b3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b19faa813fa8e64eb7834781b8a33d2ef2038f428c5e47c7fbf78e34464f22c0 |
|
MD5 | aa16d8037b1b068c891bcd7e7071980e |
|
BLAKE2b-256 | 8441e1d2f7b7f3476d9fd4337152ffb97fa808e6025a10134236f460043d4137 |
File details
Details for the file pytago-0.0.12-py3-none-any.whl
.
File metadata
- Download URL: pytago-0.0.12-py3-none-any.whl
- Upload date:
- Size: 77.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.10.0b3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4aa7ca8a4a81a61366a484f4faf56d4cff2e310d8b683feb31a6843a0dc29f5 |
|
MD5 | 5e8961f1e1724d38b8dfba351fa200cf |
|
BLAKE2b-256 | 20189db5c0afb77412d950f91fc257421e321d7186c8363f4e80faa7e33c73f5 |