第五章 函数和代码复用

1、随机密码生成

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

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

产生密码采用random.randint()函数。

import random

def genpwd(length):
    return random.randint(pow(10,length-1),pow(10,length)-1)
    #randint(a,b)产生[a,b]之间的整数

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

 2、连续质数计算

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

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

注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。

def prime(m): 
    for i in range(2,m):
        if m % i == 0:
            return False
    return True
#定义“是质数”的函数返回结果是True or False,这种函数往往被if调用

n = eval(input())
n_ = int(n) #int函数截取浮点数的整数部分,返回截取后的整数
n_ = n_+1 if n_ < n else n_
count = 5

while count > 0:
    if prime(n_):
        if count > 1:
            print(n_, end=",")
        else:
            print(n_, end="")
        count -= 1
    n_ += 1

还给出另一种写法

def prime(m):
    global count
    for i in range(2,m):
        if m%i ==0:
            break #如果整个循环下来,没有被break退出,就会去执行else语句
    else:
        count += 1
        return m
#该函数能返回是质数的数,不是质数返回值为None

def main(N):
    s = ""
    M = N+1
    '''这里M要先定义,否则会报错
    UnboundLocalError: local variable 'M' referenced before assignment
    该错误有两种情况 详见贴的链接'''
    while M > N:
        if count == 5: #当找到了五个数就不找了
            break
        if prime(M) == M: #返回值是本身时M是质数
            s += str(M)+','
        M += 1
    print(s[:-1])

import math   
count = 0
n = math.floor(eval(input())) #math库里面向下取整的函数
main(n)

如果方法二中M不定义,会报错UnboundLocalError: local variable 'M' referenced before assignment,这种方法详见这个链接Python 引用全局变量提示:local variable referenced before assignment. 问题解决办法,global使用方法介绍_挣扎的蓝藻的博客-CSDN博客

分析一下两种方法的不同的地方:

1、判断质数的函数不同

2、count一个是减到0,一个是加到5,当然本质一样

3、取整做法不一样。方法一用的int()功能是截取浮点数的整数部分,返回截取后的整数;方法二调用了向下取整的函数math.floor()。这两个函数在正数范围内功能是一样的。

int函数的用法:

Python 中 int 用法详解_团子大圆帅的博客-CSDN博客_python中int的用法

取整函数:

Python取整——向上取整、向下取整、四舍五入取整、向0取整__illusion_的博客-CSDN博客_python 取整(注意:这个round()记得看评论)

4、最后一个数不跟“,”的处理方法不一样,程序中刚好涉及count计数,所以方法一很容易通过if判断决定跟不跟“,”。方法二选的常用方法。还有方法见

第四章 程序的控制结构_siciful的博客-CSDN博客中的4、三位水仙花数


3、任意累积

请根据编程模板补充代码,计算任意个输入数字的乘积。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

注意,仅需要在标注...的地方补充一行或多行代码。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

def cmul(*b): #*b是可变参数的表示,这里表示的是输入的组合数据类型
    s = 1
    for item in b:
        s *= item
    return s

#本来应该是直接print(cmul()),因为参数是输入的不确定的,没办法写在框里,所以
#print(cmul(input()))
print(eval("cmul({})".format(input())))
#个人理解:cmul()本来是一个字符串,然后用了eval之后他就是函数公式了,不知道对不对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值