Python基础提高经典例题

来源:互联网 发布:索罗斯做空中国 知乎 编辑:程序博客网 时间:2024/06/07 01:59

例题二

10.使用不定长参数定义一个函数max_min,接受的参数类型是数值,

最终返回这些数中的最大值和最小

“””
def max_min(*args):

max = 0min = args[0]for n in args:    if max<n:         max = nfor i in args:    if i<=min:        n = minprint("最大值%s"%max)print("最小值%s" %min)

list = [6,4,326,653,3,78]
max_min(*list)
“”“

方法二

def max_min(*args):

i = max(args)     #注意max是函数,注意不要写成args.max这不是内置的j = min(args)print("最大值%s"%i)print("最小值%s" %j)

list = [6,4,326,653,3,78]
max_min(*list)

11.定义一个函数,返回n的阶乘的最后结果,并打印出如5阶乘”5! = 120”的效果
def factorial(n):

if n == 1:    return 1return n*factorial(n-1)

print(factorial(5))

方法一 使用递归

def jiechen(n):

if n == 1:    return 1num = jiechen(n - 1)return n * num

方法二 

def jiechen2(n):

result = 1while n >= 1:    result *= n    n -= 1return result

n = 6

a = jiechen(n)

a = jiechen2(n)
print(“%d! = %d” % (n, a))

12.#5.定义一个函数,打印出n以内的所有的素数
def prime(n):

list1 = []for i in range(0,n+1):    list = []    for j in range(1,i+1):        if i % j == 0:            list.append(j)    if len(list)==2:        list1.append(i)return  list1

print(prime(30))

方法二:
def is_su_shu(num):

# 当一个数只能被 1 和 他自己整数时,他就是 素数# :param num:# :return:chu_shu = 2while chu_shu < num:    if num % chu_shu == 0:  #判断中间有没有2—num中有没有可以被整除的如果有就不是素数        # 说明整除了        return False    chu_shu +=1# 循环结束,说明都没有被整除,则是素数return True

def find_all_sushu(n):

# 打印 N 以内的 所有的 素数# :param n:# :return:sushu = []while n > 0:    if is_su_shu(n):        sushu.append(n)    n -= 1print(sushu)

find_all_sushu(100)

13.请定义两个函数,一个函数画正方形,一个函数画三角形,

并且可以从键盘输入值来决定画正方形还是画三角形以及决定是否退出程序
(用 * 拼凑出形状,)

如:先提示,请选择要绘制的图形: [1] 正方形 [2] 三角形 [0] 退出

如果选择 1 ,然后提示:请输入正方形的边长,用户输入边长后,打印 正方形,然后,显示 提示

如果选择 2 ,然后提示:请输入三角形的边长,用户输入边长后,打印 三角形,然后,显示 提示

如果选择 0 ,退出程序

def square(n):

if n == 1:    print("*")else:    i = 1    while i <= n:        if i==1 or i==n:            print("*  "*5)        else:            a=len("*  "*5)            print("*"+" "*(a-2*len("*  ")+2)+"*")        i += 1

def triangle(n):

    i = 1    while i <= n:        if i==1:            print(" "*+(2*n-2)+"*")        elif i<n:            print(" "*+(2*(n+1-i)-2)+"*"+" "*(4*(i-1)-1)+"*")        else:            print("*   "*n)        i += 1

while True:

i = input("请选择要绘制的图形: [1] 正方形  [2] 三角形  [0] 退出:")if i in ["1","2"]:    if i == "1":        n = int(input("请输入边长;"))        square(n)    else:        n = int(input("请输入边长;"))        triangle(n)elif i == "0":    print("欢迎再次使用")    breakelse:    print("输入错误,请重新选择")

14.使用递归的方法打印出前n个斐波那契数列 1,1,2,3,5,8 从第3个数开始,每一个数都是前二个之和

使用递归时,当n=1时,应当返回一个数值,作为结束条件,而不是继续返回本身

def Fibonacci(i):

def num(n):    a = 1    if n <= 2:        return a    elif n >=2:        return num(n - 1) + num(n - 2)for j in range(1,i+1):    print(num(j))

Fibonacci(5)

15.1.定义函数findall,实现对字符串find方法的进一步封装,要求返回符合要求的所有位置的起始下标,
如字符串”helloworldhellopythonhelloc++hellojava”,
需要找出里面所有的”hello”的位置,最后将返回一个元组(0,10,21,29),
即将h的下标全部返回出来,而find方法只能返回第一个
(字符串的find方法,返回从左往右找到的第一个符合条件的字符的下标)

ss = “helloworldhellopythonhelloc++hellojava”

思路 一:先找到第一个符合要求的子字符串的下标,存入列表,然后将,字符串ss 剪切
如 ss 字符串,第一个符合的下标为 0 剪切以后的字符串为:worldhellopythonhelloc++hellojava
然后循环查找,并剪切

def method_1(ss):
index_list = []
cut_len = 0
while True:

    index = ss.find("hello")    if index == -1:        break    index_list.append(index + cut_len)    cut_len += index + 5    ss = ss[index + 5:]print(index_list)

思路二 :使用 find 方法,并指定开始查找的下标
def method_2(ss):

index_list = []cur_start = 0while True:    index = ss.find("hello", cur_start)    if index == -1:        break    index_list.append(index)    cur_start = index + 5print(index_list)

method_1(ss)
method_2(ss)