
根据教学反馈和之前我踩过的坑,精心整理的目前为止你们会遇到的 20 道新手 Python 语言问题
1、什么时候加 ""?
一句话,当你想让输出原封不动地打印出来时,你需要加 ""
。
举个例子:
# 输出 hello world
print("hello world")
# 输出 3 * 5 = 15 其中 15 是 3 * 5 的结果
print("3 * 5 =", 3 * 5)
print(f"3 * 5 = {3 * 5}")
print()
函数接收的参数可以是多个,多个参数之间用 ,
分隔。打印的结果会将参数用空格连接起来。
其中 sep
参数可以设置多个参数之间的分隔符,默认为 " "
。end
参数可以设置整个打印结束后的分隔符,默认为 "\n"
。
2、input() 函数里写不写提示语句?
不要!因为有些 oj 会根据文本判断来评判你的代码,如果你在 input()
函数里写提示语句,那么提示语句就会输出到控制台,导致 oj 认为你的代码有错误,从而导致你的代码被判为错误。
举个例子:
# 计算两个数的和
# 输入:1 2
# 输出:3
a, b = input().split()
print(int(a) + int(b))
如果你写成 a,b=input("请输入两个数:").split()
,那么可能会导致 oj 认为 请输入两个数:
也是输出的内容,从而导致你的代码被判为错误。
3、用 int() 还是 float()?
看题目要求,题目说用什么就用什么。题目中的实数就是浮点数。
4、如何保留 x 位小数?
这属于格式化的问题,使用 f-string 格式化即可。
pi = 3.141592653589793
# 保留 2 位小数
print(f"{pi:.2f}")
# 保留 3 位小数
print(f"{pi:.3f}")
# 保留 4 位小数
print(f"{pi:.4f}")
5、如何同时给多个变量赋值?
=
符号不仅可以赋值给一个变量,还可以赋值给多个变量。
a,b,c=[1,2,3]
print(a,b,c)
或者直接用 ,
分割多个值,然后用 =
赋值给多个变量。
a,b,c=1,2,3
print(a,b,c)
6、如何同时输入赋值多个变量?
之前说过 split()
函数是将字符串默认按空格将其分割成一个字符串列表。
比如:
text1='1 2 3'
print(text1.split())
text2='hello world'
print(text2.split())
text3='hello,nihao,welcome'
print(text3.split(","))
所以 input().split()
实际上是将一个字符串列表赋给多个变量。
7、什么时候用类型转换?
在 python 中,接收输入的变量类型是字符串,所以如果你要用数字进行一些运算,那么你需要将字符串转换为数字。
举个例子:
# 输入一个数,输出这个数的平方
a=input()
a=int(a)
print(a**2)
a=input()
print(int(a)**2)
a=int(input())
print(a**2)
# 输入两个数,输出这两个数的和
a,b=input().split()
a=int(a)
b=int(b)
print(a+b)
a,b=map(int,input().split())
print(a+b)
这里的 map()
函数的说明文档如下:

8、map() 函数怎么用?
map()
函数的参数是两个,第一个参数是函数,第二个参数是可迭代对象。
比如:
# 接收多个变量的输入赋值并转换为数字
a,b=map(int,input().split())
print(a+b)
# 接收多个变量的输入并转换为绝对值
a, b = map(abs, map(int, input().split()))
print(a , b)
9、整数计算为什么是小数?
在 python 中,整数的除法结果是浮点数。
a,b=10,5
print(a+b) # 15
print(a-b) # 5
print(a*b) # 50
print(a/b) # 2.0
print(a//b) # 2
print(a%b) # 0
这是 python 的特性,在其他语言中,计算 5 / 2 的结果是 2。而 python 中,为了避免整数除法的结果被截断,从而减少数据丢失

所以 python 为了和其他语言尽量保持相同的功能,于是便有了 //
运算符,它可以实现整数除法。
10、如何提取一个数的每一位?
这种叫拆位运算。
- 取个位:直接
%10
来算 - 去掉最后一位:
//10
- 去掉最后两位:
//100
举个例子:
# 倒叙输出一个 4 位数(每一位都不为 0)
num=int(input())
a=num//1000
b=num//100%10
c=num//10%10
d=num%10
print(d*1000+c*100+b*10+a)
11、有哪些好用的内置数学函数?
abs()
函数:返回一个数的绝对值
print(abs(-10)) # 10
pow()
函数:返回一个数的幂
print(pow(2,3)) # 8
round()
函数:返回一个数的四舍五入值
print(round(5.5)) # 6
max()
函数:返回一个数的最大值
print(max(1,2,3,4,5)) # 5
min()
函数:返回一个数的最小值
print(min(1,2,3,4,5)) # 1
sum()
函数:返回一个数的和
print(sum([1,2,3,4,5])) # 15
sorted()
函数:返回一个排序后的列表
print(sorted([1,21,3,4333,5])) # [1, 3, 5, 21, 4333]
12、如何处理若干个数据?
输入若干个整数,输出这些整数的和
由于不知道有多少个数据,所以不能用循环来处理
在 python 中,我们可以用 list() 函数来处理。
# 输入若干个整数,输出这些整数的和
a=list(map(int,input().split()))
print(sum(a))
其中的 map 函数功能是将一个字符串列表转换成一个整数列表的映射,然后 list 函数将这个映射转换成一个列表。
13、迭代的思想-斐波那契?
现定义斐波那契数列,其前两项为 ,,对于 有
则数列的前几项为:1,1,2,3,5,8
求斐波那契数列的第 n 项是多少?
# 输入一个数,输出斐波那契数列的第 n 项
n=int(input())
a,b=1,1
for i in range(n-1):
next = a+b # 新的 F(k+1)
prev = a # 旧的 F(k)
a = next
b = prev
print(b)
循环开始前:
a=f(2)=1,b=f(1)=1
每次循环把 (a,b) 滚动成 “下一项” 与 “前一项”:
轮次 | a (F(k+1)) | b (F(k)) |
---|---|---|
初值 | 1 (F2) | 1 (F1) |
1 | 2 (F3) | 1 (F2) |
2 | 3 (F4) | 2 (F3) |
3 | 5 (F5) | 3 (F4) |
4 | 8 (F6) | 5 (F5) |
14、如何判断一个数是否为闰年?
闰年的判断标准是:
- 能被 4 整除,但不能被 100 整除
- 能被 400 整除
举个例子:
# 输入一个数,判断这个数是否为闰年
a=int(input())
if a%4==0 and a%100!=0 or a%400==0:
print("闰年")
else:
print("平年")
15、如何接收 T 组输入?
平时的程序运行后输入输出就结束进程了,但是我们一般会遇到让用户输入 T 组数据,然后我们对这 T 组数据进行处理。
在 python 中,我们可以用 for
循环来处理 T 组数据。
举个例子:
# 先输入一个整数 T,表示有 T 组数据
# 之后 T 行中每行有 2 个整数
# 每一行输出该组数据的和
T=int(input())
for i in range(T):
a,b=map(int,input().split())
print(a+b)
或者还可以这样
T=int(input())
while T > 0:
T = T - 1
a,b=map(int,input().split())
print(a+b)
16、当 xxx 后停止输入?
可能还会遇到:当且仅当 a=0 且 b=0 时,输入结束,该组数据不处理。
举个例子:
# 输入两个数,当且仅当 a=0 且 b=0 时,输入结束,该组数据不处理
while True:
a,b=map(int,input().split())
if a==0 and b==0:
break
print(a+b)
17、break 和 continue 怎么用?
break
语句用于跳出循环,而 continue
语句用于跳过当前循环的剩余部分,继续下一次循环。
举个例子:
# 输入一个数,如果输入的数是 0,则跳出循环
while True:
a=int(input())
if a==0:
break
print(a)
再举个例子:
# 输入一个数,如果输入的数是 0,则跳过当前循环的剩余部分,继续下个循环
while True:
a=int(input())
if a==0:
continue
print(a)
18、for-else 循环怎么用?
for-else 循环是 for
循环的扩展,当 for
循环正常结束时,会执行 else
块中的代码。
举个例子:
# 输出 100 以内的质数
for i in range(2,100):
for j in range(2,i):
if i%j==0:
break
else:
print(i)
但凡遍历到了一个因子,就跳出循环,且由于循环没有正常结束,所以不会执行 else
块中的代码。
19、如何判断一个数是否为质数?
质数的定义:大于 1 且仅能被 1 和自身整除的正整数。
举个例子:
# 给定 T 个正整数 n,判断每个 n 是否为素数。
T = int(input())
for _ in range(T):
num = int(input())
if num < 2:
print("No")
continue
for i in range(2, num):
if num % i == 0:
print("No")
break
else:
print("Yes")
但凡遍历到了一个因子,就打印 No 然后再跳出循环,且由于循环没有正常结束,所以不会执行 else
块中的代码。
20、有没有感觉你的代码很低效?
拿 18 题来说,有必要写 for i in range(2, num)
吗?
如果 num 是一个很大的数,岂不是要从 2 开始遍历到 num,每个数运算一次看看是否能被 num 整除,这样的话效率会很低。
为什么慢:假设 num = 1 000 000 000(一个 10 亿级的素数),就会将近循环 10 亿次,效率会很低。
实际上,我们只需要这么写就可以快上万倍:for i in range(2, int(num**0.5) + 1):
如果 num 是 1 000 000 000,那么 int(num**0.5) + 1
的结果是 31624,也就是我们只需要遍历到 31624 就可以了。足足快了 3 万倍。
为什么呢?
因为一个数的因子是成对出现的,假设 num 不是质数,那么它一定可以写成两个因子相乘的形式:
其中 ,那么有 ,而 ,所以 ,那么 ,因此只需要遍历到 就可以了。
最后的 +1 因为 range()
函数的参数是左闭右开的,所以要 +1。