【测验5 编程题】: 函数和代码复用 (第5周)

第一题 随机密码生成

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

产生密码采用random.randint()函数。。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

输入输出示例

输出仅表示格式,不表示对错。

输入 输出
3 634
524
926

解答代码

这道题目一开始以为每个密码的每一位都要单独生成一个数字,结果调试了半天,都是0%。后来看了答案才知道,它其实是要求生成一个N位数的整数就是正确答案了…猝不及防。下面先上正确答案

import random

def genpwd(length):
    a = pow(10, length - 1)  # 定义一个下限
    b = pow(10, length) - 1  # 定义一个上限
    return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
    print(genpwd(length))


# 这是自己一开始的错误答案(语文的理解博大精深T_T)
import random

def genpwd(length):
    ls = []
    for i in range(length):
        ls.append(str(random.randint(0, 9)))
    s = ''.join(ls)
    return s

length = eval(input())
random.seed(17)
for i in range(3):
    print(genpwd(length))

第二题 连续质数计算

描述

补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

注意:用户输入的数字N可能是浮点数,都是正数;最后一个输出后不用逗号

输入输出示例

输入 输出
12 13,17,19,23,29

解答代码

def prime(m):
    count = 0
    ls = []
    num = m
    while count < 5:
        end = int(pow(num, 0.5)) + 1  # 缩小遍历的范围,提升速度
        for i in range(2, end):
            if num%i == 0:
                break
        else:
            count += 1
            ls.append(num)
        num += 1
    return ls
n = eval(input())
if n != int(n):  # 因为可能输入有浮点数
    n = int(n) + 1
else:  # 保证输入5.0时,输出为整数5。这里只根据题目中只输入正浮点或者正整数时做的处理
    n = int(n)
# 上面的if...else可以用一行代码搞定
# n = (int(n) + 1) if (n > int(n)) else int(n)
ls = prime(n)
length = len(ls)
for  i in range(length):
    if i < (length-1):
        print(ls[i], end=',')
    else:
        print(ls[i])

# 看了答案后优化的版本
def prime(m):
    end = int(pow(m, 0.5) + 1)
    for i in range(2, end):
        if m%i == 0:
            return False
    else:
        return True

n = eval(input())
if n != int(n):  # 因为可能输入有浮点数
    n = int(n) + 1
else:  # 保证输入5.0时,输出为整数5。这里只根据题目中只输入正浮点或者正整数时做的处理
    n = int(n)  
count = 5
while count > 0:
    if prime(n):
        if count > 1:
            print(n, end=',')
        else:
            print(n)
        count -= 1
    n += 1

说明:题目来自北理嵩天老师【Python语言程序设计 (第8期)】课程,如有侵权,立删。

你可能感兴趣的:(Python)