Python小屋——编程自测1-10

1. 计算并返回任意正整数n的阶乘,也就是从1到n所有正整数的乘积。

def main(n):
    s = 1
    for i in range(2,n+1):
        s = s*i
    return s

2. 计算并返回任意多个整数的和。

法一:使用while循环

def main(*p):
    n = len(p)
    sum = 0
    while n > 0:
        n -=1
        sum += p[n]
    return sum

法二:

def main(*p):
    return sum(p)

# 函数语法:
# sum(iterable[, start])
# iterable – 可迭代对象,如:列表(list)、元组(tuple)、集合(set)、字典(dictionary)。
# start – 指定相加的参数,如果没有设置这个值,默认为0。

3. 给定任意列表lst和一个任意值item,返回item在lst中第一次出现的位置,如果列表lst中不存在元素item则返回字符串’不存在‘。

def main(lst,item):
    if item in lst:
        return lst.index(item) #index返回第一次出现的下标
    else:
        return '不存在'

4. 函数main( )接受一个包含若干整数的列表lst,要求返回一个列表,列表中包含原列表中大于或等于所有整数平均值的整数。

写法一:

def main(lst):
    l=[]
    ave = sum(lst)/len(lst)
    for i in lst:
        if i >= ave:
            l.append(i)
    return 1

写法二:

def main(lst):
    avg = sum(lst) / len(lst)
    return [x for x in lst if x >= avg]

5. 函数main( )接收两个正整数p和q,要求返回一个元组,元组中第一个元素为p整除q的商,第二个元素为p对a的余数。

def main(p,q):
    return divmod(p,q)

# divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)

# 函数语法:
# divmod(a, b)

# 参数说明:
# a: 数字,非复数。
# b: 数字非复数。
# 如果参数 a 与 参数 b 都是整数,函数返回的结果相当于 (a // b, a % b)。
# 如果其中一个参数为浮点数时,函数返回的结果相当于 (q, a % b)
# q 通常是 math.floor(a / b),但也有可能是 1 ,比小,不过 q * b + a % b 的值会非常接近 a。

6. 函数main( )接收一个正整数num,要求返回正整数num各位数字之和。

不能使用循环结构和任何形式的推导式,不能使用内置函数eval( )。

def main(num):
    a = sum(map(int,str(num))
    return a

若使用循环,此处使用while循环:

def main(num):
    retV = num % 10
    while num // 10 > 0:
        num = num // 10
        retV += num % 10
    return retV

7. 函数main( )接收一个包含若干整数的列表Tst,要求返回一个新列表,新列表包含原列表lst中的唯一元素(重复的元素只保留一个)并且所有元素保持在原列表中首次出现的相对顺序。例如,调用函数main([1 , 2 , 3 , 1 , 4]) 会输出 [1 , 2 , 3 , 4]。不能使用循环结构和任何形式的推导式。

def main(lst):
    temp = lst(set(lst))
    return sorted(temp,key=lambda x:lst.index(x))

# 函数语法:

# sorted(iterable, cmp=None, key=None, reverse=False)

# 参数说明:
# iterable -- 可迭代对象。

# cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出。
# 此函数大于则返回1,小于则返回-1,等于则返回0。【必须遵守的规则】

# key -- 主要是用来进行比较的元素,只有一个参数。
# 具体函参取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

# 返回重新排序的列表。

8. 函数main( )接收包含若干字符串的列表lst,要求返回一个新列表,新列表中包含原列表lst中每个字符串变成小写之后的字符串。

def main(lst):
    return [x.lower() for x in lst]

# lower():将字符串中的所有大写字母转换为小写字母。

# 函数语法:
# str.lower()

# upper() 的功能和 lower() 方法恰好相反,它用于将字符串中的所有小写字母转换为大写字母,和以上两种方法的返回方式相同,即如果转换成功,则返回新字符串;反之,则返回原字符串。
# 函数语法:
# str.upper()

# -> str 返回字符串


9. 函数main( )接收一个包含若干字符串的列表lst,要求把这些字符串按长度从大到小排序并返回包含排序之后字符串的新列表。

def mian(lst):
    return sorted(lst, key=lambda x:len(x), reverse=True)

lambda完整详解和巧妙运用可以看这篇文章:
https://blog.csdn.net/PY0312/article/details/88956795

 10. 函数main( )接收一个正整数n,返回n的阶乘n!=1*2*3*...*n,要求编写代码调用该函数:分别计算并输出20的阶乘、30的阶乘和40的阶乘。

# 使用reduce和operator.mul函数计算阶乘
from functools import reduce
from operator import mul

def main(n):
    return reduce(mul, range(1,n+1))

print(main(20))
print(main(30))
print(main(40))

# mul 是乘法指令,使用 mul 做乘法的时候:相乘的两个数:要么都是8位,要么都是16位。 
# 8 位: AL中和 8位寄存器或内存字节单元中;
# 16 位: AX中和 16 位寄存器或内存字单元中。 结果 8位:AX中; 16位:DX(高位)和 AX(低位)中。

你可能感兴趣的:(董付国python小屋,python,算法)