6.8 练习与作业
1.使用函数实现,输出给定范围之间的所有素数。
输入:范围值。
输出:素数列表。
2.使用函数实现:登录菜单,主界面菜单的转换。登录菜单有登录,退出功能。登录成功进入主界面菜单,主界面菜单退出后回到登录菜单。
每个菜单函数输入:无
输出:菜单功能提示。
3.使用函数实现:进制转换,参数为十进制的数值和转换进制的底。转换结果为字符串,超出9的数字用大写字母依次代替。
输入:num, b
输出:以b为底的进制数
4.使用函数实现,查找字符串中重复出现次数大于等于指定值的字符串,并升序排列得出结果。
```
print(repeat_word_count('buffalo buffalo buffalo buffalo', 2))
['buffalo']
print(repeat_word_count('one one was a racehorse two two was one too', 3))
['one']
print(repeat_word_count('how much wood could a wood chuck chuck', 1))
['a', 'chuck', 'could', 'how', 'much', 'wood']
```
5.使用函数判断,查找出给定列表中满足每个字符都是升序的条件的字符串,并按升序排列。
```
print(sorted_words('bet abacus act celebration door'))
['act', 'bet', 'door']
print(sorted_words('apples bananas spam'))
[]
print(sorted_words('aims Zip'))
['Zip', 'aims']
```
6.使用函数实现,查找出给定字符串中,出现次数排名前五位的单词。按照出现次数降序排列,次数相同的按照升序排列,保留5个结果。
```
print(top5_words('buffalo buffalo buffalo chicken buffalo'))
['buffalo', 'chicken']
print(top5_words('one one was a racehorse two two was one too'))
['one', 'two', 'was', 'a', 'racehorse']
print(top5_words('the quick brown fox jumped over the lazy dog'))
['the', 'brown', 'dog', 'fox', 'jumped']
```
7.使用函数实现,验证10000以内的偶数总能表示为两个素数之和。
8.使用函数实现,求两个数的最小公倍数,公式:两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。
9.使用递归函数给出两个字符串从头开始相同的最长部分。
```
print(longest_prefix('python', 'pythagoras'))
pyth
print(longest_prefix('hello', 'world'))
print(longest_prefix('python', 'pyt'))
pyt
```
10.汉诺塔问题
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子借助柱子B,移动到柱子C上,每次只能移动一个圆盘,并且每次移动后,任意一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动?
输入:圆盘数量,代表三根柱子的名称字符串。
输出:无
解决思路:
把n个圆盘从A移动到C上(借助B),可以分为以下三步:
- 把n-1个圆盘从A移动到B上(借助C);
- 把最底下的1个圆盘移动到C上;
- 把n-1个圆盘从B移动到C上(借助A)。
其中1,3两步就是递归思路。编写出解决汉诺塔问题的函数,要求能输出每一步移动以及最后的总步数。
hanno(3, 'A', 'C', 'B')
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C