一、实验任务
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位的十进制数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为。
- 给定一个字符串str,要求:
(1)请将字符串的数字取出,并输出成一个新的字符串。
(2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。
(3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。例如:
‘aAsmr3idd4bgs7Dlsf9eAF’,经过去除后,输出 ‘asmr3id4bg7lf9e’
(4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。 - 编写小学生100以内加减法训练程序,并在学生结束测验后能报告正确答案的个数、正确率、测验所用的时间,并能让用户自己决定随时结束测验。
二、实验设计及结果
实验1.
(1)问题分析
“水仙花数”是指一个三位的十进制数,其各位数字立方和等于该数本身。
水仙花数的取值范围为100-999。
(2)算法设计
使用while循环来获取水仙花数,循环终止条件是i<999
个位数:i%10
十位数:i//10%10
百位数:i//100
(3)程序代码
"""
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位的十进制数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1**3+5**3+3**3
"""
#水仙花数的范围是100-999
i = 100
print("所有的水仙花数为:")
#while 循环
while i < 999:
a = i // 100 #百位数
b = i // 10 % 10 #十位数
c = i % 10 #个位数
#判断是否为水仙花数
if a ** 3 + b ** 3 + c ** 3 == i:
print(i,end=" ") #末尾不换行,以空格结尾
i += 1 #i=i+1
(4)运行结果
实验2:
1.问题分析
(1)请将字符串的数字取出,并输出成一个新的字符串。
(2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。
(3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。
(4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。
2.算法设计
(1)使用isnumeric()方法判断该字符是否为数字
(2)使用isalpha()函数判断字符串是否为字母
(3)使用isalpha()函数判断字符串是否为字母,使用for循环判断item是否在空字符串内
(4)使用sorted()函数进行排序,sorted(iterable,cmp=None,key=None,resverse=False)
3.程序代码
#(1)请将字符串的数字取出,并输出成一个新的字符串。
#定义字符串
str="aAsmr3idd4bgs7Dlsf9eAF"
#定义数字
num=" "
#使用for循环依次取出字符串的数字
for item in str :
#使用isnumeric()方法判断该字符是否为数字
if item.isnumeric():
num += item
print(f"将字符串str中的数字取出,输出为一个新字符串num为:\n{num}")
#(2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。
#定义字符串
str="aAsmr3idd4bgs7Dlsf9eAF"
#将字符串中的大写字母转换为小写字母
str=str.lower()
#定义一个空字典
dict={ }
#统计每个字母出现的次数
for item in str:
#使用isalpha()函数判断字符串是否为字母
if item.isalpha():
if item in dict:
dict[item] += 1
else:
dict[item] = 1
print(f"忽略大小写,每个字母出现的次数组成的字典为:\n{dict}")
#(3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。
#定义字符串
str="aAsmr3idd4bgs7Dlsf9eAF"
#大小写字母不敏感
str=str.lower()
#定义一个空字符串
str1=" "
for item in str:
# 使用isalpha()函数判断字符串是否为字母
if item.isalpha():
#判断item是否在空字符串str1内
if item not in str1:
str1 += item
#数字
else:
str1 += item
print(f"去除字符串多次出现的字母,仅留最先出现的一个后,组成的新字符串str1为:\n{str1}")
#(4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。
#定义字符串
str="aAsmr3idd4bgs7Dlsf9eAF"
#将字符串中的大写字母转换为小写字母
str=str.lower()
#定义一个空字典
dict={ }
for item in str :
# 使用isalpha()函数判断字符串是否为字母
if item.isalpha():
#字符出现的频率
if item in dict:
dict[item] += 1
else:
dict[item] = 1
#按照值从大到小排序,如果值相同则按照键从小到大排序
sorted_dict = sorted(dict.items(), key=lambda x: (-x[1], x[0]))
# 将排序后的键按照出现次数输出到列表中
list=[x[0] for x in sorted_dict]
print(f"按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列后的结果为:\n{list}")
(4)运行结果
实验3:
(1)问题分析
编写小学生100以内加减法训练程序,并在学生结束测验后能报告正确答案的个数、正确率、测验所用的时间,并能让用户自己决定随时结束测验
(2)算法设计
1.使用time模块计算出测验所用的时间
2.定义一个包含加减法运算符的列表option,用于随机选择运算符。
3.使用random模块生成两个0到99之间的随机整数a和b,以及一个随机的运算符o。
4.根据运算符o计算出正确答案result。
5.用户输入答案answer,并将其转换为字符串类型。
6.如果用户输入的答案等于正确答案result,则输出“回答正确”,并将正确答案的个数correctCount加1,总答案数count加1。
7.如果用户输入的答案不等于正确答案,则输出“回答错误”,总答案数count加1。
8.使用whileTrue循环,循环终止条件为exit,如果用户输入exit,则程序结束,输出正确答案的个数、正确率、测验所用的时间。
(3)程序代码
import random
import time
correctCount = 0 #回答正确数
count = 0 #回答问题总数
startTime = time.time() #开始时间
option = ['+','-'] #选择加减法
while True:
a = random.randint(0,99) #随机数1
b = random.randint(0,99) #随机数2
o = random.choice(option) #随机选择加减法
print("%d %s %d"%(a,o,b)) #测验题
answer = input(f"{a} {o} {b} = ") #输入答案
if o=="+":
result = a + b
elif o == "-":
result = a - b
#判断答案是否正确
if answer == str(result):
print("回答正确")
correctCount += 1
else:
print("回答错误")
count += 1
endTime = time.time() # 记录结束时间
testTime = int(endTime - startTime) #测试时间
exit = input("请输入'exit'退出测试\n")
if exit == 'exit':
print("一共%d道测试题\n回答正确的个数为:%d\n正确率为:%0.2f%%\n测试用时:%d秒"%(count,correctCount,(correctCount/count)*100,testTime))
break #结束循环
(4)运行结果