天梯赛练习

https://pintia.cn/problem-sets/994805046380707840/exam/problems

https://blog.csdn.net/soonway2010/article/details/129932114
https://zhuanlan.zhihu.com/p/607575071

python语法:

输入为:19 *

n, c = input().split()
n = int(n)

输入为:150

f = int(input())

根号:

import math
math.sqrt(n) # 返回float

输出不换行:

print(f"{i}*", end='')

结果相连

numbers = [1, 2, 3]
# 下面这行代码会报错,因为列表中的元素是整数,不是字符串
# print(" ".join(numbers))  

# 正确的做法是先将元素转换为字符串
str_numbers = [str(num) for num in numbers]
print(" ".join(str_numbers))  # 输出: 1 2 3

输入时候最好带一个strip

n = input().strip()

输入数组

str_list = input().split()
int_list = [int(num) for num in str_list]
# or
int_list = list(map(int, input().split()))

每个数字占5个字符宽度

print(f"{a + i:5}") # 右对齐
print(f"{a + i:<5}") # 左对齐

占4字符,不足补0

for i in range(10):
    print(f"{i:04d}")

输出字符串A-B

a = input()
b = input()
b_set = set(b)
result = ''.join([c for c in a if c not in b_set])
print(result)

最大公约数

import math
d = math.gcd(a, b)

四舍五入

round(a / 2) # 银行家舍入法 (也称为“四舍六入五成双”)
(a + 1) // 2 # 四舍五入

import math
math.ceil(a)
math.floor(a)

求偶数的个数

n = int(input())
a = list(map(int, input().split()))
even_count = sum(1 for x in a if x % 2 == 0)
print(f"{n - ans} {ans}")

大小写

lower_text = text.lower()
upper_text = text.upper()
title_text = text.title() # 首字母大写
custom_text = ''.join(
    char.upper() if i % 2 == 0 else char.lower()
    for i, char in enumerate(text)
) # 自定义大小写

字符统计

count_L = text.count('L')

保留两位小数

formatted_num = f"{num:.2f}"

字典遍历

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
    ...
for key in my_dict:
    ...
for key in my_dict.keys():
    ...
for value in my_dict.values():

数组出现次数统计:

from collections import Counter
counter = Counter(arr)

# or
count_dict = {}
for string in str_list:
    count_dict[string] = count_dict.get(string, 0) + 1

进制转换

# 假设字符串 s 是二进制形式
s = "1010"  # 二进制表示的 10
# 将字符串 s 转换为整数
result = int(s, 2)
print(result)  # 输出:10

num = 10
binary_str = bin(num)[2:]  # 去掉前缀 '0b'
print(binary_str)  # 输出:'1010'

num = 10
binary_str = f"{num:b}"
print(binary_str)  # 输出:'1010'

字符串查找与替换

text.find("Python")返回-1表示未找到

# 原始字符串
s = "yny"

# 将 'y' 替换为 '0'
s = s.replace('y', '0')

# 将 'n' 替换为 '1'
s = s.replace('n', '1')

print(s)  # 输出:010

计算数字字符串各位的和

n = int(input())
for _ in range(n):
    t = input()
    # 使用切片直接计算前三位和后三位的和
    if sum(map(int, t[:3])) == sum(map(int, t[3:])):
        print("You are lucky!")
    else:
        print("Wish you good luck.")

循环直到没有输入或有一个特定输入终止

for s in iter(input, ""):  # 当输入为空字符串时停止
    print(f"你输入的是: {s}")

输入数字简化:

def read_ints():
    return map(int, input().split())
a, b = read_ints()

输入数组简化:

def read_array(data_type):
    return list(map(data_type, input().split()))
    
# 读取整数数组
int_nums = read_array(int)

# 读取浮点数数组
float_nums = read_array(float)

找到每一位都是1,且能被n整除的数,并计算商

n = int(input())
now = 1
num = 1
ans = 0

while True:
    ans = ans * 10 + (num // n)
    if num % n == 0:
        print(f"{ans} {now}")
        break
    num = (num % n) * 10 + 1
    now += 1

字符串切片

# s[start:stop:step] 是切片的基本语法。
s = "Hello, World!"
reversed_s = s[::-1]
print(reversed_s)  # 输出: !dlroW ,olleH

一道有些语法知识的题目

L1-025 正整数A+B
分数 15
作者 陈越
单位 浙江大学
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。

输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
1.  18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
def is_valid_positive_integer(s):
    """判断字符串是否为合法的正整数(在 [1, 1000] 范围内)"""
    try:
        num = int(s)  # 尝试转换为整数
        return 1 <= num <= 1000  # 检查是否在范围内
    except ValueError:
        return False  # 如果转换失败,返回 False


def main():
    # 读取输入
    input_str = input().strip()
    # 以第一个空格分隔 A 和 B
    space_index = input_str.find(" ")
    a_str = input_str[:space_index]
    b_str = input_str[space_index + 1:]

    # 判断 A 和 B 是否合法
    a_valid = is_valid_positive_integer(a_str)
    b_valid = is_valid_positive_integer(b_str)

    # 格式化输出
    a_output = a_str if a_valid else "?"
    b_output = b_str if b_valid else "?"
    sum_output = str(int(a_str) + int(b_str)) if a_valid and b_valid else "?"

    # 打印结果
    print(f"{a_output} + {b_output} = {sum_output}")


# 调用主函数
if __name__ == "__main__":
    main()

正则表达式

import re

def replace_6(s):
    # 使用正则表达式查找所有连续的 6
    # 如果连续 6 的数量超过 9,替换为 27
    s = re.sub(r'6{10,}', '27', s)
    # 如果连续 6 的数量超过 3 但不超过 9,替换为 9
    s = re.sub(r'6{4,9}', '9', s)
    return s

# 输入句子
sentence = input()
# 替换并输出结果
result = replace_6(sentence)
print(result)

避免重复元素用set

a = set()
a.add(id)
Licensed under CC BY-NC-SA 4.0