输出所有质数

1 实验目的

  • 了解数字、布尔值、字符串、列表、元组、字典、集合等Python常用的变量类型。

  • 熟练掌握运算符、内置函数的用法。

  • 熟练掌握元素常用方法、切片和列表推导式。

2 实验内容

(一)输出所有质数

输入一个整数,输出小于该整数的所有质数(输出格式为{i:第i个质数,...},如{1: 2, 2: 3})。(二)01字符串

输入两个仅含'0'和'1'的字符串,依次输出两个字符串的所有非空子串的集合、它们所有公共的非空子串的集合以及它们所有非公共的非空子串的集合(集合按子串长度为主要关键词降序,子串表示的十进制为次要关键词升序输出)。

3 实验步骤

(一)输出所有质数

  • 步骤1 输入一个整数n。

  • 步骤2 遍历2到n-1的所有整数,找出其中所有只能被1及自身整除的整数。

  • 步骤3 通过字典输出这些整数。

print("".join(['*' * 66, '\n', '请输入'.center(66), '\n', '-' * 66, '\n',
           'ex1_1 输出所有质数'
          .center(66), '\n', '*' * 66]))
n = int(input('请输入一个整数:'))
ans = {}
for i in range(2, n):
    flag = 0
    for j in range(2, int(i ** 0.5) + 1):
        if i % j == 0:
            flag = 1
            break
    if flag == 0:
        ans.update({len(ans) + 1: i})
​
print(ans)

(二)01字符串

  • 步骤1 输入两个仅含'0'和'1'的字符串。

  • 步骤2 通过切片操作,分别得到两个字符串的所有非空子串的集合。

  • 步骤3 通过集合的交、并以及对称差运算,得到相应集合。

  • 步骤4 按照子串长度降序,子串表示的十进制数升序输出这三个集合。

print(''.join(['*' * 66, '\n', 'ZheLu 人 工 智 能 试 验 箱'.center(66), '\n', '-' * 66, '\n',
               'ex1_2 01字符串'
              .center(66), '\n', '*' * 66]))
​
str1 = input('请输入第一个仅含\'0\'和\'1\'的字符串:')
str2 = input('请输入第二个仅含\'0\'和\'1\'的字符串:')
set1 = set()
set2 = set()
​
k = len(str1)
set1.update(str1[i:j+1] for i in range(k) for j in range(i,k))
​
k = len(str2)
set2.update(str2[i:j+1] for i in range(k) for j in range(i,k))
​
print('所有非空子串的集合为:', sorted(set1 | set2, key=lambda x: (-len(x), int(x))))
print('所有公共的非空子串的集合为:', sorted(set1 & set2, key=lambda x: (-len(x), int(x))))
print('所有非公共的非空子串的集合为:', sorted(set1 ^ set2, key=lambda x: (-len(x), int(x))))

4 观察与思考

  • 可试着用列表推导式输出小于该整数的所有素数。

  • 了解通过筛选法寻找素数。

你可能感兴趣的:(算法)