python实验2:程序流程控制

一、实验任务

  1. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位的十进制数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为。
  2. 给定一个字符串str,要求:
    (1)请将字符串的数字取出,并输出成一个新的字符串。
    (2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。
    (3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。例如:
    ‘aAsmr3idd4bgs7Dlsf9eAF’,经过去除后,输出 ‘asmr3id4bg7lf9e’
    (4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。
  3. 编写小学生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)运行结果
在这里插入图片描述

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值