入门级编程通关练习题 #11 – 数列对比

给定两组数列A和B,每个数列里面的数字都是正整数。检查两个数列长度是否相同,而且数列A里面的每个数字是否可以在数列B中找到平方值。如果检查通过返回True,否则返回False。如果是空数列也返回False。譬如数列A为[11, 3, 20, 9],数列B为[81, 9, 121, 400],检查结果为True,因为数列A里面的每个数字平方后,都可以在数列B中找到对应值。 输入样例: A = [121, 11, 33, 67, 25, 144, 99, 11]B = [625, 4489, 20736, 121, 121, 1089, 9801, 14641] 输出样例: True 算法思路:…

入门级编程通关练习题 #10 –凯撒密码之ROT13

凯撒密码(Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。 ROT13(回转13位,英语:rotate by 13 places,有时也记为ROT-13)是凯撒密码的一种,也就是把明文中的所有字母都在字母表上向后偏移13位后进行加密。ROT13是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。 实现一个函数,把输入的字符串进行ROT13加密,如果是数字或者是特殊字符则保持不变。 输入样例: "CodeGuru.Academy is cool." 输出样例: "PbqrTheh.Npnqrzl vf pbby" 算法思路: 字符串一对一进行转换可以采用函数 str.maketrans() 和 str.translate()。

入门级编程通关练习题 #9 – 匹配字符串

给定一个字符串,里面的字符都是由括号组成:()、[ ]、{ }。检查这个字符里面的括号是否匹配,譬如字符串 ”[ ( ) ] { }“ 是匹配的,而字符串”] [ “是不匹配的。 输入样例: "[({})](]" 输出样例: False 算法思路: 这是典型使用stack数据类型的练习题。每次拿到一个括号,可以和栈顶的字符进行匹配。能够匹配的一对括号就可以消去,如果不能匹配或者栈内为空则压栈。最后栈内如果还有剩余括号表明该字符串里面的括号不匹配,如果为空则表明匹配。

入门级编程通关练习题 #7 – Anagram字谜

两个字符串如果都是由同样的字母组成的,就可以称为一对Anagrams,譬如"aabbc" 和 ”cabab“就是如此。 给定一个目标字符串,和一组字符串数列,用目标字符串去检查数列里的每一个字符串,看看是否和目标字符串是Anagram字谜。 输入样例: word = "data", words = ["tdaa", "atdt", "dddaa", "daata", "aadt", "ddta", "taad"] 输出样例: ['tdaa', 'aadt', 'taad'] 算法思路 方法一:使用函数 sorted 加列表推导式。方法二:使用函数 filter 加匿名函数。方法三:暴力破解,使用for循环来逐一对比。

入门级编程通关练习题 #6 – 字符回音

给定一个字符串,从第一个字母开始,每个字母重复的次数和它的位置相同,重复的字母第一个大写,后面小写,不同字母之间用 - 分隔开。 输入样例: abcdefg 输出样例: A-Bb-Ccc-Dddd-Eeeee-Ffffff-Ggggggg 算法思路: 方法一:使用字符串函数 join,lower,upper 加列表推导式。方法二:使用字符串函数 join,title 加列表推导式。方法三:暴力破解,使用for循环逐一处理。

入门级编程通关练习题 #5 – 倍数之和

10以下的数字里是3或5的倍数的数字为:3,5,6,9,它们加起来等于23。给定一个数字N,N为大于10的整数,计算小于N的数字里,3或5的倍数的数字之和。 输入样例: N = 100 输出样例: 2318 算法思路: 方法一:使用函数 sum 加列表推导式。方法二:使用函数 sum 加list 和set。方法三:暴力破解,使用for循环来逐个检查。

入门级编程通关练习题 #4 – 二进制位计数

实现一个函数,接受一个正整数作为参数,返回该数字二进制中等于1的位数之和。 输入样例: 3344 输出样例: 4 输入样例的数字 3344 用二进制来表示是:110100010000,里面总共有四个 1,所以返回结果为 4。 算法思路: 方法一:使用字符串 format函数和 count函数来统计 bit 为1的数量。方法二:使用二进制操作符 & 和 >> 来查找。方法三:暴力破解,使用for循环然后逐一对比每个字符。

入门级编程通关练习题 #3 – 字符偏差

给定一个字符串,检查里面的字符有多少不在小写字母a-m之间,输出结果为字符串格式:x / y。x为不是小写字母a到m的数量,y为字符串长度。 输入样例: atddaaaazxbbbbyyhwawiwjjjwwmz 输出样例: 11/29 算法思路: 方法一:使用函数 sub() 把a-m之间的字母去掉,剩下的字母都是不符合要求的。方法二:使用列表推导式和操作符IN来检查不符合要求的字母。方法三:使用字符串函数 str.translate() 来把a-m之间的字母去掉。方法四:使用正则表达式,譬如函数 re.findall()来检查不符合要求的字母。

入门级编程通关练习题 #2 – 银行卡密码校验

假定一张银行卡的密码必须是四位或者六位数字,给定一个密码,检查它是否符合要求。如果是四位或者六位数字,返回 True,否则返回 False。 输入样例: a123 输出样例: False 算法思路: 首先检查输入数据的长度是否是4或者6,不符合则返回 False。然后用函数 str.isdigit()来检查字符串是否都是数字。