7-1 jmu-python-简单计算器 (20 分)

制作不易点点赞吧家人们

屋檐脚下 排着乌鸦 密密麻麻,被压抑的情绪不知如何表达

文章目录

    • 7-1 jmu-python-简单计算器 (20 分)
    • 7-2 jmu-python-判断闰年 (10 分)
    • 7-3 jmu-python-素数 (10 分)
    • 7-4 jmu-python-找字符 (20 分)
    • 7-5 python -蒙特卡洛方法求圆周率 (20 分)
    • 7-6 今天是本学期的第几周的第几天? (20 分)
    • 7-7 模拟乒乓球比赛 (20 分)

7-1 jmu-python-简单计算器 (20 分)

输入一个表达式字符串,计算其结果

输入格式:

  • 行1:输入字符串数目
  • 下面分别输入要计算的表达式

输出格式:

输出计算结果,结果保留2位小数。对于异常数据能输出相应异常信息。

输入样例1:

4
1+1
56-23
5/3
5*3.5

输出样例1:

2.00
33.00
1.67
17.50

输入样例2:

3
ab+23
2/0
23+36f

输出样例2:

NameError
ZeroDivisionError
SyntaxError
count = int(input())
for i in range(count):
    try:
        equation=eval(input())
    except NameError:
        print("NameError")
    except ZeroDivisionError:
        print("ZeroDivisionError")
    except SyntaxError:
        print("SyntaxError")
    else:
        print("%.2f"%equation)
    

7-2 jmu-python-判断闰年 (10 分)

输入一个年份,判断其是否为闰年。

判断闰年的标准:能被4整除但不能被100整除,或者能被400整除的年份是闰年。

输入格式:

直接输入一个4位数年份,没有其它任何附加字符。

输出格式:

输出year是闰年 或者year不是闰年

输入样例:

1900

输出样例:

1900不是闰年

输入样例:

1904

输出样例:

1904是闰年

输入样例:

2000

输出样例:

2000是闰年
years = int(input())
if(years%4==0 and years%100!=0):
    print("{}是闰年".format(years))
elif(years%400==0):
    print("{}是闰年".format(years))
else:
    print("{}不是闰年".format(years))

7-3 jmu-python-素数 (10 分)

输入一个数,判断其是否素数。素数是大于1的自然数中,除了1和它本身以外不再有其他因数。

输入格式:

输入一个整数

输出格式:

输出是否素数。

输入样例:

12

输出样例:

12 is not prime

输入样例:

7

输出样例:

7 is prime
# # 16 ms
count=int(input())
# 素数判断
flag = 0
if count<=1:
    print("{} is not prime".format(count))
else:
    for i in range(2,count):
        if count%i==0:
            flag = 1
            print("{} is not prime".format(count))
            break
    if flag == 0:
        print("{} is prime".format(count))

# 偶数都不是素数判断一半,奇数无偶数因数可以再少一半 15 ms 
#时间复杂度减半为啥还就快了1ms 难道空间复杂度加倍了吗?????
count=int(input())
flag = 0
if count == 2:
    print("{} is prime".format(count))
elif count % 2 == 0 or count<=1:
    print("{} is not prime".format(count))
else:
    for i in range(3,int(count ** 0.5)+1,2):
        if count % i == 0:
            print("{} is not prime".format(count))
            flag = 1
            break
    if flag == 0:
        print("{} is prime".format(count))

7-4 jmu-python-找字符 (20 分)

输入一个字符串及字符,输出第一次出现该字符的位置。

输入格式:

  • 行1:输入字符串
  • 行2:输入一个字符

输出格式:

  • 找到,输出对应位置,格式index=X的, X表示查找到位置
  • 找不到,输出can't find letter X, X表示查找字符

输入样例:

python
t

输出样例:

index=3

输入样例:

python
l

输出样例:

can't find letter l
words = list(input())
letter = input()
times = 0
flag = 0
for i in words:
    times += 1;
    if i == letter:
        flag = 1;
        print(f"index={times}")
        break
if flag == 0:
    print(f"can't find letter {letter}")

7-5 python -蒙特卡洛方法求圆周率 (20 分)

尝试使用蒙特卡罗法计算圆周率(π)的值。原理如下:

7-1 jmu-python-简单计算器 (20 分)_第1张图片

如图:边长为1的正方形内部有一个半径为1的四分之一个圆。
现往该正方形内随机投点,数量足够多的情况下,落入圆内的点m与落入整个
外切正方形的点n的数量比值大概为:  
m/n = (1/4)pi ,然后就可以得到π的值。
让点(x,y)投在整个矩形中,x与y的取值范围为(0≤x≤1, 0≤y≤1)
注意
1.请使用random库中的uniform来生成随机数。
2.使用运算符x*x求x的平方。
3.使用x**(1/2)求x的平方根。

输入格式:

在一行中给出种子和投点次数,中间以空格隔开。

输出格式:

对每一组输入,在一行中输出pi的值,并保留五位小数。

输入样例:

在这里给出一组输入。例如:

2 10000

输出样例:

在这里给出相应的输出。例如:

3.13560
# 引入库
import random

# n 为外切正方形中数量
# m 为圆内数量
n = 0
m = 0
theSeed,n = map(int,input().split())

# 引入种子使用 random.seed() 以便确定同种子生成相同数据
random.seed(theSeed)
# 生成数据,面积法判断是否圆内
for i in range(n):
    x = random.uniform(0,1)
    y = random.uniform(0,1)
    if (y * y + x * x) ** 0.5 < 1:
        m += 1

# 计算π
Pi = 4*(m/n)
print("%.5f"%Pi,end="")

7-6 今天是本学期的第几周的第几天? (20 分)

根据输入的开学日期和当前的日期,判断当前日期是本学期的第几周的星期几。

输入格式:

在第一行中给出开学日期,年月日中间用‘-’隔开
在第二行中给出当前的日期,年月日中间用‘-’隔开

输出格式:

对每一组输入,在一行中输出‘今天是本学期的第m周的第n天’。

输入样例:

在这里给出一组输入。例如:

2022-2-28
2022-3-6

输出样例:

在这里给出相应的输出。例如:

今天是本学期的第1周的第7天
import datetime
import time

openingDate = input()
nowDate = input()
openingDate = time.strptime(openingDate, "%Y-%m-%d")
nowDate = time.strptime(nowDate, "%Y-%m-%d")
openingDate = datetime.datetime(openingDate[0], openingDate[1], openingDate[2])

nowDate = datetime.datetime(nowDate[0], nowDate[1], nowDate[2])
Expenses_days = nowDate-openingDate
weeks = (Expenses_days.days+7) / 7
# print(Expenses_days.days,int(weeks))
days = int((Expenses_days.days%7)+1)
print('今天是本学期的第{}周的第{}天'.format(int(weeks),days),end="")

7-7 模拟乒乓球比赛 (20 分)

中国选手与日本选手进行乒乓球比赛,每局先得11分者赢得此局,整个比赛5局3胜,
假设中国选手每一分获胜的概率为m,(含m,m<1)。
请模拟比赛过程,并输出各队获胜情况。
请注意:
请使用random库中的random模拟胜率

输入格式:

请在第一行输入整数随机种子。
请在第二行输入中国对获胜的概率(大于0小于1的数)
请在第三行输入要模拟的比赛次数

输出格式:

对每一组输入,根据模拟结果在一行中输出:
Chinese team:m,Japanese team:n。

输入样例:

在这里给出一组输入。例如:

3
0.6
100

输出样例:

在这里给出相应的输出。例如:

Chinese team:98,Japanese team:2
# 此题个人理解有偏差,应该计算每一次比赛中小得分和五局三胜的问题,所以应复写代码以下代码为错误前留档。
# import random

# theSeed = int(input())
# odds = eval(input())
# times = int(input())
# winCount = 0

# # 种子输入
# random.seed(theSeed)

# # random():返回随机生成的一个实数,它在[0,1)范围内。
# # 可以使用数轴思路,生成随机数与胜率比较,比胜率低中国赢,比胜率高日本赢
# for i in range(times):
#     randomCount = random.random()
#     if randomCount <= odds:
#         winCount += 1

# # 结果
# loseCount = times-winCount
# print(f"Chinese team:{winCount},Japanese team:{loseCount}")

import random

theSeed = int(input())
odds = eval(input())
times = int(input())
# 大局中国队获胜分数。
CHWinCount = 0
# 大局日本队获胜分数。
JPWinCount = 0

# 种子输入。
random.seed(theSeed)

# random():返回随机生成的一个实数,它在[0,1)范围内。
for i in range(times):
#         小局中国队获胜次数。
    ChGameWinCount = 0
#         小局日本队获胜次数。
    JPGameWinCount = 0
#         中国队小局内分数。
    CHCount = 0
#     日本队小局内分数。
    JPCount = 0

#         进入小局模拟循环 五局三胜
    while ChGameWinCount != 3 and JPGameWinCount != 3:
#         需要把随机数拿出来算,其实放下面直接判断也没事,但是这样效率高。
#         random():返回随机生成的一个实数,它在[0,1)范围内。 --来自菜鸟教程
        Count = random.random();
    
#         这一行是复杂判断,根据顺序意思为: 中国队11分且不存在局点 or 日本队11分且不存在局点 or 在局点但是有一队分数超过对方两分。
#         补充说明: 乒乓球规则中 11分取胜,但是如果双方都是10分的情况下进入局点,只有连续获得两分的队伍才能取胜。
#         Eg:中国队10:10日本队 -> 中国队11:10日本队 -> 中国队11:11日本队 -> 中国队12:11日本队 -> 中国队13:11日本队 -> 中国队胜利
#         所以有必要进行最后的判断,但是不确定是否在得分中。
        if (CHCount == 11 and CHCount - JPCount >= 2) or (JPCount == 11 and JPCount - CHCount >= 2) or (
                CHCount > 11 and JPCount > 11 and (CHCount > JPCount or CHCount < JPCount)):
#             显而易见的是谁分高谁胜场加一,记得将比分归零,防止影响下一场比赛
            if CHCount > JPCount:
                ChGameWinCount += 1
                CHCount = 0
                JPCount = 0
            else:
                JPGameWinCount += 1
                CHCount = 0
                JPCount = 0
#         不在获胜条件下,使用数轴思想,输入的胜率就可以与随机数比较,比胜率高那对方得分,比胜利低则我方得分。
        elif Count <= odds:
            CHCount += 1
        elif Count > odds:
            JPCount += 1

    #     判断是否大局获胜 获胜加一大分,记得清空比赛小分
    if ChGameWinCount == 3:
        CHWinCount += 1;
        ChGameWinCount = 0;
        JPGameWinCount = 0;
    else:
        JPWinCount += 1;
        ChGameWinCount = 0;
        JPGameWinCount = 0;

print(f"Chinese team:{CHWinCount},Japanese team:{JPWinCount}")

在这里插入图片描述
看起来老师修改了规则,那么分数判断就简单了不少
7-1 jmu-python-简单计算器 (20 分)_第2张图片
上面的判断可以改为如下条件

# 当然使用原本的方法也不影响。
if CHCount == 11 or JPCount == 11

抱着沙发 睡眼昏花 凌乱头发,却渴望想电影主角一样潇洒

你可能感兴趣的:(python)