【python】py课后作业程序题5「PTA」

7-1 Python猜数游戏

猜数字游戏编程:计算机随机产生一个0~100以内的正整数,用户输入一个数对其进行猜测,程序对其与随机产生的被猜数进行比较,并提示大了(“Too big”)、小了(“Too small”),还是相等(“Lucky You!”)。如果猜到,则结束程序。如果超过8次都没有猜到,则提示“Game Over!”,并结束程序。如下图:
在这里插入图片描述

提示:随机因子seed设置为1(防止调试错误)

输入格式:
每行给出一个用户的输入,直到猜中或者超过8次还没有猜中。

输出格式:
每次在一行中输出相应的猜测结果,直到输出猜对的结果“Lucky You!”或“Game Over!”则结束。

输入样例:
56
25
12
20
16
18
17
输出样例:
在这里给出相应的输出。例如:

Too big
Too big
Too small
Too big
Too small
Too big
Lucky You!

思路:
很简单,首先生成随机数,然后套个while循环次数设定为8次,每次循环加一,然后判断输入的字符,成功修改flag并break。

代码区:

import random

random.seed(1)
cnt = 0
flag = 0
res = random.randint(0, 101)
while cnt < 8:
    cnt += 1
    ans = eval(input())
    if ans > res:
        print("Too big")
    elif ans < res:
        print("Too small")
    else:
        print("Lucky You!")
        flag = 1
        break
if flag == 0:
    print("Game Over!")

7-2 jmu-python-分段函数

本题目要求计算下列分段函数f(x)的值(x为从键盘输入的一个任意实数):
在这里插入图片描述

输入格式:
输入在一行中给出实数 x。

输出格式:
在一行中按“f(x)=result”的格式输出,其中x与result都保留两位小数。

输入样例:
0.76
输出样例:
f(0.76)=1.20
思路:
简单,除了输出格式需要注意其他没了
代码区:

def f(x):
    if x < 3:
        return 1.2
    elif x == 3:
        return 10
    else:
        return 2 * x + 1

x = eval(input())
print("f({:.2f})={:.2f}".format(x, f(x)))

7-3 循环求e的近似值(高教社,《Python编程基础及应用》习题6-7)

编写一个程序,从键盘读取k,计算e的近似值(保留10位小数)。

在这里插入图片描述

输入格式:

5的正整数k

输出格式:
e的近似值(保留10位小数)

输入样例:
6
输出样例:
2.7180555556

思路:
我首先定义了一个递归函数来取n!,然后就是累加。

代码区:

def f(n):
    if n == 0:
        return 1
    return n * f(n - 1)

k = int(input())
e = 0
for i in range(k + 1):
    e += 1 / f(i)
print("{:.10f}".format(e))

7-4 jmu-python-判断是否构成三角形

输入三角形的三边,判断是否能构成三角形。若能构成输出yes,否则输出no。

输入格式:
在一行中直接输入3个整数,3个整数之间各用一个空格间隔,没有其他任何附加字符。

输出格式:
直接输出yes或no,没有其他任何附加字符。

输入样例1:
3 4 5
输出样例1:
yes
输入样例2:
1 2 3
思路:
就是非常简单的判断语句。

代码区:

nums = [int(x) for x in input().split()]
if nums[0] + nums[1] <= nums[2] or nums[0] + nums[2] <= nums[1] or nums[1] + nums[2] <= nums[0]:
    print("no")
else:
    print("yes")

7-5 jmu-python-输入输出-计算字符串中的数

将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。

输入格式:
一行字符串,字符串中的数之间用1个空格或者多个空格分隔。

输出格式:
第1行:输出数的个数。
第2行:求和的结果,保留3位小数。

输入样例:
2.1234 2.1 3 4 5 6
输出样例:
6
22.223

思路:
先全部存入列表,然后调用sum方法求和

代码区:

nums = [eval(x) for x in input().split()]
print(len(nums))
print("{:.3f}".format(sum(nums)))

7-6 jmu-python-随机生成密码

新建一个字符列表,这个列表中的内容从前到后依次包含小写字母、大写字母、数字。 形如[‘a’,…,‘z’,‘A’,…,‘Z’,‘0’,…‘9’]
建议:使用代码生成该字符列表。

分别输入随机数的种子x(整型),随机生成的密码个数n,每个密码长度m。
每个密码包含的m个字符是从上述字符列表中随机抽取 。
注意:本题不要用sample函数,否则答案错误。

输入格式:
种子x (注意:需将x转换为整数型再进行设置)
密码个数n
每个密码的长度m

输出格式:
n行密码、每行m位。

输入样例:
1
10
8
输出样例:
iK2ZWeqh
FWCEPyYn
gFb51yBM
WXaSCrUZ
oL8g5ubb
bPIa84yR
nBUbHoWC
8FJowoRo
WD8s7bA1
6J7PglOU

思路:
首先将所有大小写字母和数字(这里采用了string库中的读取字母和数字的方法)存入strList中作为总表,然后每次循环将其中下标通过随机数得出取出对应的字符存入pwd中作为密码列表,最后通过join方法来输出为字符

代码区:

import string
import random
strlist = []
str1 = string.ascii_letters + string.digits
for x in str1:
    strlist.append(x)
x, n, m = int(input()), int(input()), int(input())
random.seed(x)
for i in range(n):
    pwd = []
    for j in range(m):
        pwd.append(strlist[random.randint(0, 61)])
    print("".join(pwd))

7-7 jmu-python-重复元素判定

每一个列表中只要有一个元素出现两次,那么该列表即被判定为包含重复元素。
编写函数判定列表中是否包含重复元素,如果包含返回True,否则返回False。
然后使用该函数对n行字符串进行处理。最后统计包含重复元素的行数与不包含重复元素的行数。

输入格式:
输入n,代表接下来要输入n行字符串。
然后输入n行字符串,字符串之间的元素以空格相分隔。

输出格式:
True=包含重复元素的行数, False=不包含重复元素的行数
,后面有空格。

输入样例:
5
1 2 3 4 5
1 3 2 5 4
1 2 3 6 1
1 2 3 2 1
1 1 1 1 1
输出样例:
True=3, False=2

思路:
采用了字典思想,每次出现就对应字典键值加一,如果出现2的就判断为重复。
dic.get(方法为取第一个参数的值,如不存在就即为第二个参数)

代码区:

trueL = 0
n = int(input())
for i in range(0, n):
    strL = input()
    dic = {
    
    }
    for c in strL.split(" "):
        dic[c] = dic.get(c, 0) + 1
        if dic[c] == 2:
            trueL += 1
            break
print("True={0}, False={1}".format(trueL, n - trueL))

7-8 jmu-python-从列表中删除元素

删除列表中所有符合条件的值。

输入格式:
输入n,代表要测试n次。每次测试:
首先,输入1行字符串(字符串内的元素使用空格分隔)
然后,输入要删除的元素x。

输出格式:
输出删除元素x后的每行字符串。如果元素全部被删除,则输出空行。
注意:行尾不得有多余的空格。

输入样例:
5
1 1 1 2 1 2 1 1 1
1
1 1 1 2 2 2 1 1 1
2
ab ab ab cd cd de de
ab
1 1 1 1
1
x y x x x z
t
输出样例:
2 2
1 1 1 1 1 1
cd cd de de

x y x x x z

思路:
如果是需要删除的元素就不加入新列表,否则就加入新列表,实现删除的效果、

代码区:

n = int(input())
for i in range(0, n):
    list = input().split()
    ch = input()
    newL = []
    for x in list:
        if x != ch:
            newL.append(x)
    print(" ".join(newL))

7-10 找出字符串中出现次数最多的字符

本题目要求读入一个字符串,统计字符串中每个字符出现的次数,输出现次数最多(输入的数据中,出现次数最多的字符唯一)的字符以及次数。

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

输入样例:
xabaaccd1ma1b
输出样例:
a,4

思路:
使用字典,将输入存入字典,然后在通过sorted进行按照值排序,最后输出

代码区:

zifu = input()
dic = {
    
    }
for x in zifu:
    dic[x] = dic.get(x, 0) + 1
dicNew = sorted(dic.items(), key = lambda x: x[1])
print("{0},{1}".format(dicNew[-1][0], dicNew[-1][1]))

7-11 华氏温度到摄氏温度的转换(高教社,《Python编程基础及应用》习题3-9)

从键盘读取华氏温度,转换成摄氏温度并输出,保留1位小数。
转换公式为:c=5/9*(f-32), 其中,f为华为温度,c为摄氏温度。

输入格式:
华氏温度

输出格式:
摄低温度

输入样例:
100
输出样例:
37.8

思路:
过于简单,不讲

代码区:

n1 = eval(input())
print("{:.1f}".format(5 / 9 * (n1 - 32)))

新手上路,(几乎不会是最优解,轻点打)有错请指正;

猜你喜欢

转载自blog.csdn.net/qq_33884853/article/details/128502092