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),可以分为以下三步:

  1. 把n-1个圆盘从A移动到B上(借助C);
  2. 把最底下的1个圆盘移动到C上;
  3. 把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