3.2 判断年份是否闰平年。
year = int(input("请输入年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print(f"{year}是闰年。")
else:
print(f"{year}是平年。")
区分:% 取余 即整除。 / 除以。 // (向下)取整。
3.3 求一个自然数除了自身以外的最大约数。
num = int(input('请输入一个整数:'))
count = num // 2
while count > 0:
if num % count == 0:
print(count, 'is the max factor of ', num)
break
count = count - 1
一个整数,除了自身以外的最大因子的值,不会超过此整数除以2的商。
如49,49//2=24,则24*2=48,则24是49的最大因子。
最大约数就看在1~24中,哪个数能够被49整除且最大。
3.4 对一个整数进行质因数分解。
n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2
while i <= n:
if i == n:
print(i, end="")
break
elif n % i == 0:
print(i, end="*")
n = n / i
else:
i += 1
4.1 有两个列表。1>合并列表并去除重复,放在C中。2>对C按元素大小降序排序。
a = [4,10,12,4,9,6,3]
b = [12,8,5,6,7,6,10]
c_list = set(a + b)
print(c_list)
print(sorted(c_list, reverse=True))
这里输出的c_list是一个集合。可以把c_list转换为列表。即:
c_list = list(set(a + b)
4.2 已知一个列表,统计列表中各元素出现次数,并按格式输出。
a_list = [4, 6, 3, 8, 9, 0, 3, 3, 7, 1, 4, 6, 7, 3, 4]
result = []
for i in a_list:
if i not in result:
result.append(i)
print("元素", i, "在列表中出现了", a_list.count(i), "次")
5.20 阅读代码,写出执行结果。
x = list(range(10))
x[::3] = map(lambda y:y**2,[1,2,3,4])
print(x)
输出结果:
[1,1,2,4,4,5,9,7,8,16]
原理:x[::3] = y 是指将x列表中每隔3个数的索引(即0、3、6、9)更换为y中(即1、4、9、16)相应的值。
5.2 定义一个函数,对任意两个函数之间的所有整数(包含本身)求和。函数有两个参数,用于指定起始及结束整数,较小的作为起始整数。将结果作为返回值返回。
def sum_z(start,end):
if start>end:
start,end = end,start "较小的作为起身整数。这就是交换次序。"
return sum(range(start,end+1)) "求和可以用range。"
print(sum_z(10,5))
5.3 定义一个函数,计算矩形的面积与周长。包含两个参数:长和宽,且由于正方形是特殊的矩形,因此也支持传递一个参数的情况。当传递一个参数时,表示长宽相等,返回计算结果。
def square(length, width=None):
if width is None:
width = length
area = length * width
p = (length + width) * 2
print(f"面积为:{area}")
print(f"周长为:{p}")
square(2)
square(2,4)
5.4 角谷定理。随机输入一个自然数,若为偶数则将其除以2,若为奇数则将其乘以3加1。经过有限次运算,总能得到自然数值1。捕获用户输入的数字,然后输出从该数字到最终结果1的过程,统计需要经过多少步计算可得到自然数1。
count = 0
random = int(input("随机输入一个自然数:"))
while random != 1:
if random % 2 == 0:
random = random // 2
print(random)
count += 1
else:
random = random * 3 + 1
print(random)
count += 1
print(f"步数为:{count}")
注意这里偶数的情况,除以要用//取整而不是%取余,否则random为0。
5.5 一只青蛙一次可以跳上一节台阶,也可以跳上两节。求该青蛙跳上一个n节台阶总共有多少种跳法。(先后次序不同,算作不同结果)
这是一个斐波那契数列问题,此处用递归的办法给出。 来源GPT3.5。
def jump_floor(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
return jump_floor(n - 1) + jump_floor(n - 2)
print(f"有{jump_floor(10)}种跳法。")
原理:当 n 等于 1 或 2 时,跳法总数分别为 1 和 2。当 n 大于 2 时,可以先跳上一级台阶,然后剩下的 n-1 级台阶的跳法总数为 jump_floor(n - 1);或者先跳上两级台阶,然后剩下的 n-2 级台阶的跳法总数为 jump_floor(n - 2)。因此,总的跳法总数为这两个子问题的跳法总数之和。
5.6编写函数,对传递的一组数据进行操作,调整数据的位置,使得所有奇数位于前半部分,所有偶数位于后半部分,并保证奇数和奇数、偶数和偶数之间的相对位置不变。
来源GPT3.5。
def reorder_array(nums):
"""
将奇数放在偶数前面,且保证奇数和奇数、偶数和偶数之间的相对位置不变。
:param nums: 待调整的数组
:return: 调整后的数组
"""
n = len(nums)
i, j = 0, 0 # 定义两个指针 i 和 j
while j < n:
if nums[j] % 2 == 1: # 当前数是奇数
nums[i], nums[j] = nums[j], nums[i] # 将当前数与第一个偶数交换
i += 1
j += 1
return nums
原理:它使用两个指针 i 和 j,初始值都为 0。当 j 对应的数为奇数时,将它与第一个偶数交换,并将指针 i 向右移动。这样,指针 i 始终指向当前奇数应该放置的位置。然后将指针 j 向右移动,继续扫描数组,直到 j 超出数组范围为止。这样,所有奇数都被放在了偶数的前面,并且奇数和奇数、偶数和偶数之间的相对位置没有发生变化。