编写一个函数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, 310+3(33), 3310+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)