Python基础中典型问题

编写一个函数gcd(x,y) 求最大公约数,编写一个函数lcm(x,y)求最小公倍数。


# 最大公约数
def gcd(x, y):
    max_num = 1
    for n in range(min(x, y), 0, -1):
        if x%n==0 and y%n==0:
            max_num = n
            break
    return max_num

print(gcd(12, 8))


# 最小公倍数
# 方式一:
def lcm(x, y):
    for n in range(max(x, y), x*y+1):
        if n%x==0 and n%y==0:
            return n

print(lcm(5, 6))

# 方式二:
def lcm(x=8, y=12):
    print(x*y // gcd(x, y))

lcm()

封装函数,实现如下要求

例如:输入2,5,则求2+22+222+2222+22222的和
def fun1(a, n):
    s = 0
    sum1 = 0
    for i in range(n):
        s = s*10+a    
        sum1 += s
    return sum1

print(fun1(2,3))

输入两个数n,a, 输出对应的结果

如: n=3,a=2; 输出 2 + 22 + 222 的值。(**
如: n=4,a=3; 输出 3 + 33 + 333 + 3333的值。
提示:
1、n = 3,相加三次,每次相加比前一次相加的数,多一位
2、每次多的这个位数的值为a, 3, 3
10+3(33), 33
10+3(333),…

a = int(input('请输入一个a:'))
n = int(input('请输入一个n:'))
sum_num = 0
n = 0
for i in range(n):
    n = n * 10 + a
    sum_num += n
print(sum_num)

使用Python编程实现下面图形打印:

'''
     *
    **
   ***
  ****
 *****
'''
n = 6
# 方式一:
for i in range(1, n+1):
     print((n-i)*' ', i*'*', sep='')
# 方式二:
for i in range(1, n+1):
    print(('*'*i).rjust(n,' '))

'''
    *
   ***
  *****
 *******
********* 
'''
# 方式一:
n = 5
for i in range(1, n+1):
    print(' '*(n-i) + '*'*(2*i-1))

# 方式二:
for i in range(1, n+1):
    print(('*'*(2*i-1)).center(2*n-1, ' '))

使用Python写一个按照下面方式调用都能正常工作的 my_sum() 方法

例如:
print(my_sum(2,3)) 输出 5
print(my_sum(2)(3)) 输出 5

提示:
通过参数数量判断不同的情况
1.有1个参数, 嵌套函数
2.有2个参数, 返回和

def my_sum(*args):  # args=(2,)
    if len(args) == 2:
        return sum(args)
    else:
        def fn(x):  # x=3
            return x + args[0]
        return fn

print(my_sum(2,3))
print(my_sum(2)(3))

def my_sum(*args):
    if len(args) > 1:
        return sum(args)
    else:
        def my_sum1(*brgs):
            s = sum(args) +sum(brgs)
            return s
    return my_sum1

print(my_sum(2,3))
print(my_sum(2)(3))

封装函数

第一个函数create_persons(),创建并返回包含5个字典(例如:{“name”:“xx”,“age”:xx, “faceValue”:100})的列表其中name的值:从[“张三”,“李四”,“王五”,“赵六”,“钱七”]依次取 其中age的值:10-100之间的随机整数其中faceValue的值:0-100之间的随机整数第二个函数get_old(), 传入第一个函数创建的列表, 找出列表中年龄最大的人,并将其所有信息打印第三个函数sort_facevalue(), 传入第一个函数创建的列表, 根据颜值升序排列,并打印排序后的信息

def create_persons():
    persons = []
    name_list = ["张三","李四","王五","赵六","钱七"]

    for name in name_list:
        person = {
            "name": name,
            "age": random.randint(10, 100),
            "faceValue": random.randint(0,100)
        }
        persons.append(person)

        # d = {}
        # d['name'] = name
        # d['age'] = random.randint(10, 100)
        # d['faceValue'] = random.randint(0,100)
        # persons.append(d)

    print(persons)

    return persons

'''
[
 {'name': '张三', 'age': 12, 'faceValue': 72}, 
 {'name': '李四', 'age': 40, 'faceValue': 9}, 
 {'name': '王五', 'age': 25, 'faceValue': 32}, 
 {'name': '赵六', 'age': 20, 'faceValue': 80}, 
 {'name': '钱七', 'age': 82, 'faceValue': 92}
]
'''
def get_old(persons):
    old_person = max(persons, key=lambda d: d['age'])
    # print(old_person)

    old_persons = [p for p in persons if p['age']==old_person['age']]
    print(old_persons)


def sort_facevalue(persons):
    persons.sort(key=lambda d: d['faceValue'])
    print(persons)

# 调用
persons = create_persons()
persons = [
 {'name': '张三', 'age': 12, 'faceValue': 72},
 {'name': '李四', 'age': 40, 'faceValue': 9},
 {'name': '王五', 'age': 82, 'faceValue': 32},
 {'name': '赵六', 'age': 20, 'faceValue': 80},
 {'name': '钱七', 'age': 82, 'faceValue': 92}
]
get_old(persons)
sort_facevalue(persons)

兔子繁殖问题

设有一对新生的兔子,从第4个月开始他们每个月月初都生一对新兔子, 新生的兔子从第4个月开始又每个月月初生一对兔子。按此规律,并假定兔子没有死亡,20个月末共有多少对兔子?

def func1(n):
    if n < 4:
        return 1
    return func1(n-1) + func1(n-3)

print(func1(20))

年月日分别为自定义函数的参数,判断某一个日期是否为合法的日期;

如: 2020年12月33日不是合法的日期
2021年2月29日是不合法的日期

def fn3(year, month, day):
    if month not in range(1, 13):
        return False
    if month == 2:
        if year%4==0 and year%100!=0 or year%400==0:
            if day>29:
                return False
        else:
            if day >28:
                return False
    elif month in [4, 6, 9, 11]:
        if day > 30:
           return False

    else :
        if day > 31:
            return False
    return True


print(fn3(2021,2,28))

请统计s字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 d = {‘a’:4,‘b’:2}

提示:循环,判断字符是否在字典中,‘a’in d

s = "aAsmr3idd4bgs7Dlsf9eAF"
s1 = s.lower()  
d = {}
for s2 in s1:
    if s2.isdigit():
        continue
    if s2 not in d:
        d[s2] = 1  
    else:
        d[s2] += 1
print(d)

输出s字符串出现频率最高的字母, 如果有多个最高,将每个都输出max(d .values()) ,再循环

s = "aAsmr3idd4bgs7Dlsf9eAF"
s1 = s.lower()
d = {}
for s2 in s1:
    if s2.isdigit():
        continue
    if s2 not in d:
        d[s2] = 1
    else:
        d[s2] += 1
max_values = max(d.values())
for max_key in d:
    if d[max_key] == max_values:
        print(max_key)

请判断’boy’字符串中的每一个字母,是否都出现在s字符串里.如果出现,则输出True,否则,则输出False

s = "aAsmr3idd4bgs7Dlsf9eAF"
for i in 'boy':
    if i not in s:
        print(False)
        break
else:
    print(True)

将字符串按照单词进行逆序,空格作为划分单词的唯一条件

如传入:”Welome to Beijing”改为 “Beijing to Welcome”
split, reverse, join

s = 'Welome to Beijing'
s_word = s.split()
s_word.reverse()
s = ' '
print(s.join(s_word))

输入一个字符串,压缩字符串如下aabbbccccbbd变成a2b5c4d1

s = 'aabbbccccbbd'
d ={}
for s1 in s:
    if s1 not in d:
        d[s1] = 1
    else:
        d[s1] += 1
s2 = ''
for k,v in d.items():
    s2 += k+str(v)
print(s2)

将字符中单词用空格隔开

已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开,只保留第一个单词的首字母大写,传入:”HelloMyWorld”,返回:”Hello my world”

s = "HelloMyWorld"
s1 = 1
while s1 < len(s):
    if s[s1].isupper():
        s = s.replace(s[s1], ' '+ s[s1].lower())
        s1 += 1
    s1 += 1
print(s)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值