Python + Go 练习题1-10

该练习题旨在学习Go和回忆Python用法,所以只实现核心功能,不再冗余进行异常处理

NO.1

编写一个程序,查找所有此类数字,它们可以被7整除,但不能是5的倍数(在2000和3200之间(均包括在内))。获得的数字应以逗号分隔的顺序打印在一行上

  • Python代码实现
'''
编写一个程序,查找所有此类数字,它们可以被7整除,
但不能是5的倍数(在2000和3200之间(均包括在内))。获得的数字应以逗号分隔的顺序打印在一行上
'''
arr = []
for num in range(2000, 3201):
    if num % 7 == 0 and num % 5 != 0:
        arr.append(str(num))
print(','.join(arr))
  • Go代码实现
package main

import (
    "fmt"
    "strconv"
    "strings"
)

//编写一个程序,查找所有此类数字,它们可以被7整除,
//但不能是5的倍数(在2000和3200之间(均包括在内))。获得的数字应以逗号分隔的顺序打印在一行上
func main() {
    var numbers []string
    for i := 2000; i <= 3200; i++ {
        if i%5 != 0 && i%7 == 0 {
            numbers = append(numbers, strconv.Itoa(i))
        }
        
    }
    tr1 := strings.Join(numbers, ",")
    fmt.Println(tr1)
}
  • 结果
2002,2009,2016,2023,2037,2044,2051,2058,2072,2079,2086,2093,2107,2114,2121,2128,2142,2149,2156,2163,2177,2184,2191,2198,2212,2219,2226,2233,2247,2254,2261,2268,2282,2289,2296,2303,2317,2324,2331,2338,2352,2359,2366,2373,2387,2394,2401,2408,2422,2429,2436,2443,2457,2464,2471,2478,2492,2499,2506,2513,2527,2534,2541,2548,2562,2569,2576,2583,2597,2604,2611,2618,2632,2639,2646,2653,2667,2674,2681,2688,2702,2709,2716,2723,2737,2744,2751,2758,2772,2779,2786,2793,2807,2814,2821,2828,2842,2849,2856,2863,2877,2884,2891,2898,2912,2919,2926,2933,2947,2954,2961,2968,2982,2989,2996,3003,3017,3024,3031,3038,3052,3059,3066,3073,3087,3094,3101,3108,3122,3129,3136,3143,3157,3164,3171,3178,3192,3199

No.2

编写一个程序,可以计算给定数字的阶乘,结果应以逗号分隔的顺序打印在一行上,假设向程序提供了以下输入:8然后,输出应为:40320

  • Python 代码实现
'''
编写一个程序,可以计算给定整数数字的阶乘,结果应以逗号分隔的顺序打印在一行上,假设向程序提供了以下输入:8然后,输出应为:40320
'''
number_int = input("请输入整型数字:")
try:
    # 先检查输入的内容是否可以转成float,之后再判定有没有带小数点
    num = float(number_int)
    if num.is_integer() and str(number_int).count('.') == 0:
        for i in range(1, int(num)):
            num = i * num
        print(num)
    else:
        print('非整型')
except:
    print('非数字')

结果

请输入整型数字:8
40320.0
  • Go 代码实现
package main

import (
    "fmt"
)

//编写一个程序,可以计算给定整数数字的阶乘,结果应以逗号分隔的顺序打印在一行上,
//假设向程序提供了以下输入:8然后,输出应为:40320

func main() {
    var num int
    var count int
    // 终端接收一个整型数值
    fmt.Printf("请输入一个整型数值")
    fmt.Scanln(&num)
    count = num
    for i := 1; i < num; i++ {
        count *= i
    }
    fmt.Printf("阶乘结果:%d", count)
}
  • 结果
请输入一个整型数值8
阶乘结果:40320

No.3

使用给定的整数n,编写程序以生成包含(i,ixi)的字典,该字典为1到n之间的整数(都包括在内)。然后程序应打印字典。假设向程序提供了以下输入:8然后,输出应为:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

  • Python 实现
number_int = input("请输入整型数字:")
num = float(number_int)
num_dict = {}
if num.is_integer() and str(number_int).count('.') == 0:
    for i in range(1, int(num)+1):
        num_dict.update({i:i*i})
    print(num_dict)
  • Go 实现
package main

import "fmt"

func main() {
    var num int
    fmt.Printf("请输入一个整型数值")
    fmt.Scanln(&num)
    num_map := make(map[int]int)
    for i := 1; i<= num; i++ {
        num_map[i] = i * i
    }
    fmt.Println(num_map)
}
  • 输出
# python
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
# go
map[1:1 2:4 3:9 4:16 5:25 6:36 7:49 8:64]

No.4

1、求最大公约数和最小公倍数
两个数的最大公约数是两个数的公共因子中最大的那个数;最大公约数=两数同时被一个最大的数除尽
两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。最小公倍数=两数相乘÷两数的最大公约数
输入:(120和60是通过键盘输入的)
x = 120
y = 60
输出:
60和120的最大公约数60
60和120的最小公倍数是120

  • Python 实现
x = int(input('x = '))
y = int(input('y = '))
# 计算最小公倍数,找出两个数最小的那个。
if x > y:
    k = y
else:
    k = x
for i in range(k, 0, -1):
    if x % i == 0 and y % i == 0:
        print("%d和%d的最大公约数是%d" % (x, y, i))
        print("%d和%d的最小公倍数数是%d" % (x, y, x * y / i))
        break

  • Go 实现
package main

import "fmt"

func main() {
    var x int
    var y int
    fmt.Printf("请输入一个整型数值x:")
    fmt.Scanln(&x)
    fmt.Printf("请输入一个整型数值y:")
    fmt.Scanln(&y)
    if x > y {
        // 运用Go语言的变量多重赋值,实现变量交换
        x, y = y, x
    }
    for i := x; i > 0; i-- {
        if x%i == 0 && y%i == 0 {
            fmt.Printf("%d和%d的最大公约数是%d", x, y, i)
            fmt.Println()
            fmt.Printf("%d和%d的最小公倍数是%d", x, y, x*y/i)
            break
        }
    }
}
  • 结果
60和120的最大公约数是60
60和120的最小公倍数是120

No.5

斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34
输入:(数字10是通过键盘输入的)
请输入需要打印的斐波那契数列的数据个数(从1开始):10
输出:(每一个数据项之间用空格)
1 1 2 3 5 8 13 21 34 55

  • Python 实现
def fib(n):
    a = 1
    b = 1
    for i in range(n):
        print(a, end=' ')
        temp = a
        a = b
        b = temp+b
num = int(input("请输入需要打印的斐波那契数列的数据个数(从1开始):"))
fib(num)
  • Go实现
package main

import "fmt"

func fib(n int) {
    a := 1
    b := 1
    for i := 0; i < n; i++ {
        fmt.Printf("%d ", a)
        temp := a
        a = b
        b = temp + b
    }

}

func main() {
    var num int
    fmt.Printf("请输入需要打印的斐波那契数列的数据个数(从1开始):")
    fmt.Scanln(&num)
    fib(num)
}
  • 结果
请输入需要打印的斐波那契数列的数据个数(从1开始):10
1 1 2 3 5 8 13 21 34 55 

No.6

求和运算
求 s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
输入 a=4,n=5
输出:
4
44
444
4444
44444
前面5个数的和为:49380

  • Python 实现
a = int(input("a = "))
n = int(input("n = "))
Tn = 0
Tn_sum = 0
for i in range(n):
    Tn += a
    Tn_sum += Tn
    a = a*10
    print(Tn)
print("前面5个数的和为: %s" % Tn_sum)

  • Go 实现
package main

import "fmt"

func main() {
    var a int
    var n int
    fmt.Printf("a = ")
    fmt.Scanln(&a)
    fmt.Printf("n = ")
    fmt.Scanln(&n)
    Tn := 0
    Tn_sum := 0
    for i := 0; i < n; i++ {
        Tn += a
        Tn_sum += Tn
        a = a * 10
        println(Tn)
    }
    fmt.Println("前面5个数的和为: %s", Tn_sum)
}
  • 结果
a = 4
n = 5
4
44
444
4444
44444
前面5个数的和为: 49380

No.7

求前n阶乘的和
比如求1+2!+3!+...+20!的和。
输入:n=20
输出:前20阶乘的和是:2561327494111820313

  • Python 实现
n = int(input("n = "))
Tn_sum = 0
for i in range(1,n+1):
    Tn = 1
    for j in range(1,i+1):
        Tn *=j
    Tn_sum +=Tn
print("前%s阶乘的和是:%s" %(n,Tn_sum))
  • Go 实现
package main

import "fmt"

func main() {
    var n int
    fmt.Printf("n = ")
    fmt.Scanln(&n)
    Tn_sum := 0
    for i := 1; i <= n; i++ {
        Tn := 1
        for j := 1; j <= i; j++ {
            Tn *= j
        }
        Tn_sum += Tn
    }
    fmt.Printf("前%d阶乘的和是:%d", n, Tn_sum)
}
  • 结果
n = 20
前20阶乘的和是:2561327494111820313

No.8

求两个列表中的相同元素和不同元素
给定两个列表,怎么找出他们相同的元素和不同的元素
输入:
list1 = [1,2,3]
list2 = [3,4,5]
输出:
list1 和 list2 的相同元素是: [3]
list1 和 list2 的不同元素是:[1,2,4,5]

  • Python
list1 = [1,2,3]
list2 = [3,4,5]
# 去重
set1 = set(list1)
set2 = set(list2)
a = set1 & set2
b = set1 ^ set2
print("list1 和 list2 的相同元素是: ", list(set1))
print("list1 和 list2 的不同元素是:", list(set2))
  • Go 实现
package main

import (
    "fmt"
    mapset "github.com/deckarep/golang-set/v2"
)

func main() {
    s1 := mapset.NewSet(1, 2, 3)
    s2 := mapset.NewSet(3, 4, 5)
    // 交集
    fmt.Println("list1 和 list2 的相同元素是: ", s1.Intersect(s2).ToSlice())
    fmt.Println("list1 和 list2 的不同元素是: ", s1.SymmetricDifference(s2).ToSlice())
}

  • 结果
list1 和 list2 的相同元素是:  [1, 2, 3]
list1 和 list2 的不同元素是: [3, 4, 5]

No.9

两个列表转合并为一个字典
输入:
m = ['a','b','c']
n = [11,22,33]
输出:
{'a': 11, 'b': 22, 'c': 33}

  • Python 实现
m = ['a', 'b', 'c']
n = [11, 22, 33]
dict_mn = {}
for i in range(0, len(m)):
    dict_mn.update({m[i]: n[i]})
print(dict_mn)
  • Go 实现
package main

import (
    "fmt"
)

func main() {
    m := []string{"a", "b", "c"}
    n := []int{11, 22, 33}
    map1 := make(map[string]int)
    for i := 0; i < len(m); i++ {
        map1[m[i]] = n[i]

    }
    fmt.Println(map1)
}
  • 结果输出
# python
{'a': 11, 'b': 22, 'c': 33}
# go
map[a:11 b:22 c:33]

No.10

倒序输出列表/数组中的数据
输入:
a = ["one","two","three"]
输出:
three
two
one

  • Python 实现
a = ["one","two","three"]
for i in a[::-1]:
    print(i)
  • Go 实现
package main

import (
    "fmt"
)

func main() {
    m := []string{"one", "two", "three"}
    for i := len(m) - 1; i >= 0; i-- {
        fmt.Println(m[i])
    }
}
  • 结果输出
three
two
one
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容