1.水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153
错误代码:
for i in range(100, 1000):
i1 = i // 100
i2 = i // 10 % 10
i3 = i % 10
if i1 ** 3 + i2 ** 3 + i3 ** 3 != i:
print(f"{i}是水仙花数")
for i in range(100, 1000):
i1 = i // 100
i2 = i // 10 % 10
i3 = i % 10
if str(i1 ** 3 + i2 ** 3 + i3 ** 3) == i:
print(f"{i}是水仙花数")
错误点:
代码1.判断部分条件应该是==
代码2.字符串不能和整数比较
正确代码:
for i in range(100, 1000):
i1 = i // 100 # 取百位数字 123//100=1
i2 = i // 10 % 10 # 取十位数字 123//10=12 12%10=2
i3 = i % 10 # 取个位数字 123%10=3
if i1 ** 3 + i2 ** 3 + i3 ** 3 == i:
print(f"{i}是水仙花数")
2.逆序字符串
错误代码:
str = input("请输入字符串")
list = []
for x in range(len(str) - 1, -1, -1):
list.append(str[x])
print(list.join(''))
错误点:
join使用错误:改为''.join(list)
正确代码:
str = input("请输入字符串")
list = []
for x in range(len(str) -1,-1,-1):
list.append(str[x])
print(''.join(list))
3.猜数字
随机生成一个 100 以内的整数,共有 10 次机会开始游戏,输入猜测的数字。
-
如果猜小了,则提示:猜小了
-
如果猜大了,则提示:猜大了
-
猜对了,则提示:猜对了,并且结束游戏
-
10 次机会用完还没猜对,提示:游戏结束,没有猜到。
错误代码:
import random as rd
number = rd.randint(0, 100)
for i in range(10):
choice = int(input("请输入你要猜测的数字:"))
if choice > number:
print("你猜大了")
elif choice < number:
print("你猜小了")
else:
print("你猜对了,真棒!")
print(f'还剩{i}次机会')
else:
print('游戏结束,你没有猜到')
错误点:
1.else print后面应该加上break,猜对了退出循环
2.还剩9-i次机会
正确代码:
import random as rd
number = rd.randint(0,100)
for i in range(10):
choice = int(input("请输入你要猜测的数字:"))
if choice > number:
print("你猜大了")
elif choice < number:
print("你猜小了")
else:
print("你猜对了,真棒!")
print(f'你一共用了{i + 1}次机会')
break
print(f'还剩{9 - i}次机会')
else:
print('游戏结束,你没有猜到')
4.判断闰年
输入年月日,输出该日期是否是闰年,并且输出该日期是此年份的第几天
闰年判断条件:
-
能被 4 整除,并且不能被 100 整除
-
能被 400 整除
-
两个条件满足任意一个就为闰年
错误代码:
year = input("请输入年份")
month = input("请输入月份")
day = input("请输入日期")
date_list = [31,29,31,30,31,30,31,31,30,31,30,31]
count_day = day
if year % 4 == 0 and year % 100 !=0 or year % 400 == 0:
print(f'{year}年是闰年')
date_list[1]=29
else:
print(f'{year}年是平年')
date_list[1]=28
for i in range(month):
count_day += date_list[i]
print(f'{year}年{month}月{day}日是当年的第{count_day}天')
错误点:
1.输入日期时,input会返回字符串,所以要转换为整数int
2.for循环遍历范围应该是从0到month-1,因为列表下标从零开始,防止下标越界
正确代码:
year = int(input("请输入年份"))
month = int(input("请输入月份"))
day = int(input("请输入日期"))
date_list = [31,29,31,30,31,30,31,31,30,31,30,31]
count_day = day
if year % 4 == 0 and year % 100 !=0 or year % 400 == 0:
print(f'{year}年是闰年')
date_list[1]=29
else:
print(f'{year}年是平年')
date_list[1]=28
for i in range(month-1):
count_day += date_list[i]
print(f'{year}年{month}月{day}日是当年的第{count_day}天')
5.快乐数:
在给定的数字下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必定为 1
错误代码:
def sum_square(n):
sum = 0
for i in str(n):
sum += int(i) ** 2
return sum
list1 = []
n = int(input('请输入数字:'))
while sum_square(n) not in list1:
sum_square(n)
list1.append(n)
if n == 1:
print('是快乐数')
else:
print('不是快乐数')
错误点:
while循环中没有更新n的值,应该为n = sum_square(n)
正确代码:
def sum_square(n):
sum = 0
for i in str(n):
sum += int(i) ** 2
return sum
list1 = []
n = int(input('请输入数字:'))
while sum_square(n) not in list1:
n = sum_square(n)
list1.append(n)
if n == 1:
print('是快乐数')
else:
print('不是快乐数')
6.递归阶乘求和
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数之积,并且 0 的阶乘为 1
错误代码:
def factor(n):
if n < 2:
return 1
return n * factor(n + 1)
s_sum = 0
for i in range(1, 11):
s_sum += factor(i)
print(s_sum) # 4037913
错误点:
函数递归调用应该returnn*factor(n-1)
正确代码:
def factor(n):
if n < 2:
return 1
return n * factor(n - 1)
s_sum = 0
for i in range(1, 11):
s_sum += factor(i)
print(s_sum) # 4037913
7.打印 99 乘法表
错误代码:
i = 1
while i <= 9:
j = 1
while j < i:
print("%d*%d=%-2d"%(i,j,i*j),end = ' ') # %d: 整数的占位符,'-2'代表靠左对齐,两个占位符
j += 1
print()
i += 1
错误点:
内层while循环条件应该是j<=i
正确代码:
i = 1
while i <= 9:
j = 1
while j <= i:
print("%d*%d=%-2d"%(i,j,i*j),end = ' ') # %d: 整数的占位符,'-2'代表靠左对齐,两个占位符
j += 1
print()
i += 1
8.字母出现的次数
统计字符串“Hello, welcome to my world.” 中字母 w 出现的次数
错误代码:
def test():
message = 'Hello, welcome to my world.'
# 计数
num = 0
# for 循环 message
for i in message:
# 判断如果 ‘w’ 字符串在 message 中,则 num +1
if 'w' in i:
num += 1
return num
print(test())
# 结果
2
错误点:
应该是判断是否相等,而不是判断w在不在遍历到的该字符中
正确代码:
def test():
message = 'Hello, welcome to my world.'
# 计数
num = 0
# for 循环 message
for i in message:
if 'w' == i:
num += 1
return num
print(test())
9.第 m 个只出现过 n 次的字符
输入一个字符串 str,输出第 m 个只出现过 n 次的字符,如在字符串 gbgkkdehh 中,找出第 2 个只出现 1 次的字符,输出结果:d
错误代码:
def test(str_test, num, counts):
"""
:param str_test: 字符串
:param num: 字符串出现的次数
:param count: 字符串第几次出现的次数
:return:
"""
# 定义一个空数组,存放逻辑处理后的数据
list = []
# for循环字符串的数据
for i in str_test:
# 使用 count 函数,统计出所有字符串出现的次数
count = str_test.count(i, 0, len(str_test))
# 判断字符串出现的次数与设置的counts的次数相同,则将数据存放在list数组中
if count == num:
i.append(list)
# 返回第n次出现的字符串
return list[counts-1]
print(test('gbgkkdehh', 1, 2))
结果:
d
错误点:
append方法格式错误,应为list.append(i)
正确代码:
def test(str_test, num, counts):
"""
:param str_test: 字符串
:param num: 字符串出现的次数
:param count: 字符串第几次出现的次数
:return:
"""
# 定义一个空数组,存放逻辑处理后的数据
list = []
# for循环字符串的数据
for i in str_test:
# 使用 count 函数,统计出所有字符串出现的次数
count = str_test.count(i, 0, len(str_test))
# 判断字符串出现的次数与设置的counts的次数相同,则将数据存放在list数组中
if count == num:
list.append(i)
# 返回第n次出现的字符串
return list[counts-1]
print(test('gbgkkdehh', 1, 2))
结果:
d
10.质数
判断一个数是否为质数
错误代码:
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i = 0:
return False
return True
错误点:
很常见也是很简单的语法错误,if判断里面要使用双等号
正确代码:
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True