目 录CONTENT

文章目录

Python公式模板

~梓
2025-04-08 / 0 评论 / 0 点赞 / 15 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、怎么获取一个数的每一位

例子:输入:12306

输出:[1, 2, 3, 0, 6]

num = input()
result = [int(x) for x in str(num)]
print(result)

例题扩展一、按位运算

给定一个数字,按位处理,将奇数位数字相加,偶数位数字相乘,最后输出这两个结果。

import math
num = input()

odd = []
even = []
for i,v in enumerate(num):
    if i % 2 == 1:
        even.append(int(v))
    else:
        odd.append(int(v))

odd = sum(odd)
even = math.prod(even)
print(odd)
print(even)

例题扩展二、数字排列

输入一个数字,将其每一位数字取出后,并找出其中最大的数。

示例:输入:15976

输出:97651

from itertools import permutations

num = input()
# 将数字的每一位转换为整数列表
digits = [int(digit) for digit in num]
# 生成所有可能的排列
perms = permutations(digits)
max_num = 0
for perm in perms:
    # 将排列转换为整数
    current_num = int(''.join(map(str, perm)))
    if current_num > max_num:
        max_num = current_num

print(max_num)

方法二:

num = input()
result = ''
a = map(int, ','.join(num.split()))
ss = sorted(a, reverse=True)
for i in ss:
    result += str(i)
print(result)

二、计算数的二进制、八进制、十六进制

内置函数实现:

decimal_num = 255

# 转换为二进制
binary_num = bin(decimal_num)
print(f"二进制: {binary_num}")

# 转换为八进制
octal_num = oct(decimal_num)
print(f"八进制: {octal_num}")

# 转换为十六进制
hexadecimal_num = hex(decimal_num)
print(f"十六进制: {hexadecimal_num}")

特别注意:使用 xX 作为格式说明符可以将十进制数转换为十六进制字符串,x 生成的十六进制字符为小写,X 生成的为大写。

代码中,format(decimal_num, 'x') 会将 decimal_num 转换为小写的十六进制字符串,format(decimal_num, 'X') 则会转换为大写的十六进制字符串,并且都不会添加 0x 前缀。

decimal_num = 255
binary_num = format(decimal_num, 'b')
print(f"二进制: {binary_num}")

octal_num = format(decimal_num, 'o')
print(f"八进制: {octal_num}")

hexadecimal_num_lower = format(decimal_num, 'x')
hexadecimal_num_upper = format(decimal_num, 'X')
print(f"十六进制(小写): {hexadecimal_num_lower}")
print(f"十六进制(大写): {hexadecimal_num_upper}")

例题扩展一、字母数

请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 00)都为字母(AA 到 FF)。请将这个数的十进制形式作为答案提交。

num = 2022
while True:
    num += 1
    result = format(num,'x')
    if result.isalpha():
        print(int(result,base=16))
        break

例题扩展二、进制转换

  1. 输入一个十进制整数(可能为负数)。
  2. 将其转换为二进制、八进制、十六进制。
  3. 输出格式要求:
    • 二进制:补前导零至 8 位,不带 0b 前缀。
    • 八进制:不带 0o 前缀。
    • 十六进制:使用大写字母,不带 0x 前缀。

示例:

请输入一个十进制整数:-25
二进制:-00011001
八进制:-31
十六进制:-19
num = int(input())

two = format(num,'b')
eight = format(num,'o')
sixteen = format(num,'x')

print(two)
print(eight)
print(sixteen)

三、怎么循环日期?

from datetime import date, timedelta

start_date = date(1900, 1, 1)
end_date = date(9999, 12, 31)

while start_date < end_date:
    current_time = start_date
    print(current_time)
    start_date += timedelta(days=1)

例题扩展一、特殊日期

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 11 月 11 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。例如,2022 年 11 月 13 日满足要求,因为 2+0+2+2=(1+1)+(1+3)。请提交满足条件的日期的总数量。

from datetime import date, timedelta

start_date = date(1900, 1, 1)
end_date = date(9999, 12, 31)
count = 0
while start_date < end_date:
    current_time = start_date
    dit_year = [int(x) for x in str(current_time.year)]
    dit_month = [int(x) for x in str(current_time.month)]
    dit_day = [int(x) for x in str(current_time.day)]
    if sum(dit_year) == sum(dit_month) + sum(dit_day):
        count += 1
    start_date += timedelta(days=1)
print(count)

四、排列组合问题

排列

排列指的是从 n 个不同元素里取出 mm ≤ n)个元素,按照一定顺序排成一列。itertools.permutations 函数可用来生成指定可迭代对象的所有排列。

import itertools

# 定义一个列表
numbers = [1, 2, 3]

# 生成列表中所有元素的长度为 2 的排列
permutations = itertools.permutations(numbers, 2)

# 遍历并打印所有排列
for perm in permutations:
    print(perm)

组合

组合是从 n 个不同元素中取出 mm ≤ n)个元素组成一组,不考虑元素的顺序。itertools.combinations 函数可用于生成指定可迭代对象的所有组合。

import itertools

# 定义一个列表
numbers = [1, 2, 3]

# 生成列表中所有元素的长度为 2 的组合
combinations = itertools.combinations(numbers, 2)

# 遍历并打印所有组合
for comb in combinations:
    print(comb)

例题扩展一、大乘积

小蓝有 30 个数,分别为:99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。

小蓝可以在这些数中取出两个序号不同的数,共有 30×29/2=435 种取法。

请问这 435 种取法中,有多少种取法取出的两个数的乘积大于等于 2022 。

from itertools import combinations
import math

lst = [99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11,
       18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77]
count = 0

for i in combinations(lst, 2):
    result = math.prod(i)
    if result > 2022:
        count += 1

print(count)
0

评论区