Python程序练习题

目录


1.1 重量计算

月球上物体的体重是在地球上的16.5%,假如你在地球上每年 增长0.5kg,编写程序输出未来10年你在地球和月球上的体重状况

# -*- codeing = utf-8 -*-
# @Time : 2022/10/19 15:29
# @Author : 可乐不加糖
# @File : height.py
# @Software: PyCharm

a_height = input("请输入你的体重:")
c_height = 0
for i in range(10):
    a_height = float(a_height) + 0.5
    c_height = a_height * 0.165
print("10年后,你在地球上的体重:{:}".format(a_height))

print("10年后,你在月球上的体重:{:.2f}".format(c_height))

1.2 天天向上续

人的能力发展并不是无限的,它符合特定模型。假设能力增长符合如下带有平台期的模型:以7天为周期,连续学习3天能力值不变,从第4天开始至第7天每天能力增长为前一天的1%。如果7天中有1天间断学习,则周期从头计算。请编写程序回答,如果初识能力值为1,连续学习365天后能力值是多少?

固定每10天休息1天,365天后能力值是多少?如果每15天休息1天呢?

# -*- codeing = utf-8 -*-
# @Time : 2022/10/19 19:13
# @Author : 可乐不加糖
# @File : daydayup.py
# @Software: PyCharm

import math

s, h = 1.0,0.01

for i in range(1, 366):

    if i % 7 in [1, 2, 3]:
        s = s
    else:
        s = s * 1.01

print("连续学习365天后的能力值为:{:.2f}".format(s))

s, h = 1.0, 0.01
for i in range(1, 366):
    if i % 7 in [1, 2, 3] or i % 10 in [1, 2, 3]:
        s = s
    else:
        s = s * 1.01
print("固定每10天休息一天,365天后的能力值为:{:.2f}".format(s))
s, h = 1.0, 0.01
for i in range(1, 366):
    if i % 7 in [1, 2, 3] or i % 10 in [1, 2, 3] or i % 15 in [1, 2, 3]:
        s = s
    else:
        s = s * 1.01
print("固定每15天休息一天,365天后的能力值为:{:.2f}".format(s))

 1.3 回文数判断

回文数判断。设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判段这个数字是不是回文数。

# -*- codeing = utf-8 -*-
# @Time : 2022/10/19 19:53
# @Author : 可乐不加糖
# @File : Palindrome_number_judgment.py
# @Software: PyCharm

numbers_one = input("请输入一个五位数:")
# numbers_two = int(numbers_one)
if numbers_one[0::] == numbers_one[::-1]:
    print("{:}是回文数".format(numbers_one))
else:
    print("{:}不是回文数".format(numbers_one))

 1.4 田字格的输出

使用print()函数输出田字格。 

# -*- codeing = utf-8 -*-
# @Time : 2022/10/19 20:06
# @Author : 可乐不加糖
# @File : matts.py
# @Software: PyCharm
# 田字格的输出
for i in range(11):
    if i in [0, 5, 10]:
        print("+---------+---------+")
    else:
        print("|         |         |")

1.5 工资表输出

 输出工资表打印一份员工工资,输入员工的姓名、工作时长、每小时收入、税率和养老金比例,计算员工的净收入并输出相应的信息。

员工的工资 = 每小时收入 * 工作时长

税费 = 工资 * 税率

养老金 = 工资 * 养老金比例

净收入 = 工资 – 税费 – 养老金

输入格式:输入共5行,每一行依次为员工的姓名、工作时长、每小时收入、税率和养老金比例

输出格式:依次在每一行输出:姓名、工作小时、每小时收入、工资、扣除金额(保留2位小数)、净收入(保留2位小数)

# -*- codeing = utf-8 -*-
# @Time : 2022/10/15 20:08
# @Author : 可乐不加糖
# @File : NetPay.py
# @Software: PyCharm
Employee_Name = input("Employee name:") # 提示输入员工姓名
Hours_Work = input("Hours Work:") # 提示输入员工的工作时长
Pay_Rate = input("Pay Rate:") # 提示输入员工每小时的收入
shui_lv = input("税率:") # 提示输入税率
yanglaojin_bl = input("养老金比例:") # 提示输入养老金比例
Gross_Pay = int(Hours_Work) * int(Pay_Rate)
shui_fei = Gross_Pay * float(shui_lv)
yanglaojin = Gross_Pay * float(yanglaojin_bl)
jing_shouru = Gross_Pay - yanglaojin - shui_fei
print("Employee_Name:", Employee_Name)
print("Hours Worked:", Hours_Work)
# print("Pay Rate:", Pay_Rate)
print("Pay Rate:{:$>4}".format(Pay_Rate))
# print("Gross Pay:", Gross_Pay)
print("Gross_Pay:{:$>4}".format(Gross_Pay))
print("Deductions:{:.2f}".format(shui_fei+yanglaojin))
print("Net Pay:{:.2f}".format(jing_shouru))

1.6 格式化输出字符串

 输入3行字符串,然后对其按照说明进行格式化输出输入格式:

第1行:一个浮点数字符串

第2行:一个整数字符串

第3行:一个非数值型字符串

输出格式:

对浮点数字符串:第1行: 保留2位小数输出

第2行: 分别输出浮点数的小写字母e的指数形式,大写字母e的指数形式, 百分数形式且其小数部分为2位。每个输出的元素之间以一个空格分隔。

对于整数:第3行:在一行分别输出其二进制与小写十六进制,之间以一个空格分隔。对非数值型字符串:首先,去除掉字符串得左右空格。然后输出3行:

第4行,将全部字符转化为大写并输出。

第5行,将字符串右对齐输出,宽度为20。

第6行,将字符串居中输出,宽度20,两侧使用*填充。

最后:第7行,将浮点数与整数以浮点数 + 整数 = 结果的形式输出

# -*- codeing = utf-8 -*-
# @Time : 2022/10/19 14:06
# @Author : 可乐不加糖
# @File : geshihua_str.py
# @Software: PyCharm

a_str = input("请输入一个浮点数:")
b_str = input("请输入一个整数:")
c_str = input("请输入一个非数值型字符串:       ")

print("{:.2f}".format(float(a_str))) # 将a_str保留两位小数输出

print("{:.6e} {:.6E} {:.2f}%".format(float(a_str), float(a_str), float(a_str) * 100))

d = bin(int(b_str)) # 将十进制转换成二进制
e = hex(int(b_str)) # 将十进制转换成十六进制
print(f'{d[2:]} {e[2:]}')

print("{:<}".format(c_str.upper())) # 将字母转大写并且去掉左右空格输出
print("{:>20}".format(c_str)) # 右对齐宽度为20输出
print("{:*^20}".format(c_str)) # 居中对齐宽度20其余星号占据
print("{:} + {:} = {:}".format(float(a_str), int(b_str), float(a_str)+int(b_str)))




4.1 random库的使用

# -*- codeing = utf-8 -*-
# @Time : 2022/10/26 20:28
# @Author : 可乐不加糖
# @File : suiji_int.py
# @Software: PyCharm
import random

# 随机生成100内的10个整数
for x in range(10):
    one_int = random.randint(0, 100)
    print(one_int, end=',')
print()
# 随机选取0到100间的奇数

two_int = random.randint(0, 100)
if two_int % 2 == 0:
    two_int += 1
print(two_int, end=',')
print()
# 从字符串'abcdefghijk'中随机选取4个字符
list_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
list_b = ['h', 'i', 'j', 'k']
list_c = list_a + list_b
for x in range(4):
    v = random.choice(list_c)
    print(v, end=',')
print()
# 随机选取列表['apple', 'pear', 'peach', 'orange']中的一个字符串
list_cd = ['apple', 'pear', 'peach', 'orange']
b = random.choice(list_cd)
print(b)

Python 编程 猜数字

 游戏(猜数字):随机生成一个数字,(取值范围[1,100])。让用户猜数字,并给出相应的提示:如果用户输入比答案大,提示Too big,try again;反之,提示Too small,try again;如果猜中了,提示Congratulations!。最后,要给出反馈(答案,猜的次数,猜的历史)。

# -*- codeing = utf-8 -*-
# @Time : 2022/10/28 17:11
# @Author : 可乐不加糖
# @File : cainumber.py
# @Software: PyCharm
import random
number_test = random.randint(1, 100) # 随机生成一个1到100的整数
count = 0 # count用于记录用户猜的次数
list_test = [] # list_test用于记录用户猜过的数字
while 1:
    number_guess = input("请输入你猜的数字:")
    count += 1
    list_test.append(number_guess)
    if int(number_guess) > number_test:
        print("Too big,try again")

    if int(number_guess) < number_test:
        print("Too small,try again")

    if int(number_guess) == number_test:
        print("Congratulation!")

        break
print("要猜的数字是:%d" % number_test)
print("你猜了%d次" % count)
print("你猜过的数字:")
for i in list_test:

    print("%s" % i, end='  ')

统计不同字符的个数: 

 用户从键盘输入空格和其他 数字、 统计不同字符个数。 

# -*- codeing = utf-8 -*-
# @Time : 2022/11/2 15:01
# @Author : 可乐不加糖
# @File : panduan_str.py
# @Software: PyCharm

en_str = number_str = space_str = other_str = 0
i = 10
while(i):
    i -= 1
    str_aaa = input("请任意输入一串字符:")
    for x in range(len(str_aaa)):

        if 'a' <= str_aaa[x] <= 'z' or 'A' <= str_aaa[x] <= 'Z':
            en_str += 1
        elif '0' <= str_aaa[x] <= '9':
            number_str += 1
        elif str_aaa[x] == ' ':
            space_str += 1
        else:
            other_str += 1
    print(f'英文字符的个数:{en_str},数字的个数:{number_str},空格的个数:{space_str},其他字符的个数:{other_str}')

判断水仙花数

# -*- codeing = utf-8 -*-
# @Time : 2022/11/2 8:50
# @Author : 可乐不加糖
# @File : Daffodil number.py
# @Software: PyCharm

number_one = eval(input("请输入一个整数:"))
baifenwei = number_one // 100
shifenwei = number_one // 10 % 10
gewei = number_one % 100 % 10
if baifenwei ** 3 + shifenwei ** 3 + gewei ** 3 == number_one:
    print(f'{number_one}是水仙花数')
else:print(f'{number_one}不是水仙花数')

 计算三角形面积和周长

# -*- codeing = utf-8 -*-
# @Time : 2022/11/2 9:52
# @Author : 可乐不加糖
# @File : sanjiaoxing.py
# @Software: PyCharm
import math
a = eval(input("请输入三角形的第一条边:"))
b = eval(input("请输入三角形的第二条边:"))
c = eval(input("请输入三角形的第三条边:"))
s = (a + b + c) // 2
def area():
    area = math.sqrt(s * (s - a) * (s - b) * (s - c))
    return area
def zhouchang():
    zhouchang = a + b + c
    return zhouchang
if a + b > c and a + c > b and b + c > a:
    print("true!")
    print("area={:.2f}".format(area()), "perimeter={:.2f}".format(zhouchang()))
else: print("These sides do not correspond to a valid triangle!")

计算运费

某运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:其中基本运输费用为每吨每公里1元,现请你帮助该运输公司设计自动计费程序,帮助会计人员计算运输费用。输入格式:输入每次运输的载重(吨)、里程(公里)。输出格式:输出其运输费用,精确到元。

# -*- codeing = utf-8 -*-
# @Time : 2022/11/2 10:19
# @Author : 可乐不加糖
# @File : The freight.py
# @Software: PyCharm
weight, s = eval(input("请输入本次运输的载重(吨)和里程(公里):"))
def calculate():

    global money
    if s < 250:
        money = weight * s
    if 250 <= s <500:
        money = (weight * s) * 0.98
    if 500 <= s <1000:
        money = (weight * s) * 0.95
    if 1000 <= s <2000:
        money = (weight * s) * 0.92
    if 2000 <= s <3000:
        money = (weight * s) * 0.90
    if 3000 <= s:
        money = (weight * s) * 0.85
    return money
print(f'所需运输费用:{calculate()}元')

 判断年龄是否可以入学

根据相关规定,当年8月31日之前年满6周岁的儿童可以报名上小学。根据身份证号审核儿童2022年是否具有报名资格。(从第七位开始的八位为出生日期)输入格式:输入身份证号输出格式:如果输入的不是18位,输出“输入格式错误”;否则判断是否具有报名资格,输出”yes”或no”。

# -*- codeing = utf-8 -*-
# @Time : 2022/11/2 14:04
# @Author : 可乐不加糖
# @File : age.py
# @Software: PyCharm
i = 10 # 设置一个值给while循环
while(i):
    i = i - 1
    birthyday = 0
    id_number = input("请输入身份证号:")
    count = 0
    for x in id_number:
        count += 1
    if count != 18:
        print("输入格式错误!")
    else:
        birthyday = id_number[6:10]
        a = 2022 - int(birthyday)
        if a > 6:
            print("yes!")
            # if int(id_number[10:14]) <= 0831 :
        elif a == 6:
            if id_number[10:14] <= '0831':
                print("yes!")
            else:
                print("no!")
        else:
            print("no!")

第七次上机作业

  1. 水仙花数求和

水仙花数是指一个N位正整数(N3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1x1x1+5x5x5+3x3x3。本题要求编写程序,计算所有N位水仙花数的个数与和。
函数接口定义:
在这里描述函数接口。例如:
def sxh(n)
在这里解释接口参数。例如: 其中 n是一个正整数N (3N5)。
裁判测试程序样例:
#这里补充程序实现函数sxh(n)的定义
n=int(input())
x,sum1=sxh(n)
print(‘t:d) d》format(x,sum1)) 

# -*- codeing = utf-8 -*-
# @Time : 2022/11/23 14:09
# @Author : 可乐不加糖
# @File : shui_xian_hua_shu.py
# @Software: PyCharm
i = 1
while i > 0:
    def sxh(n):
        count = 0
        sum2 = 0
        if n == 3:
            for i in range(100, 1000):
                a = int(i / 100)
                b = int(i / 10) % 10
                c = int(i % 10)
                if a * a * a + b * b * b + c * c * c == i:
                    count += 1
                    sum2 += i
            return count, sum2
            # print('{:d} {:d}'.format(count, sum2))
        if n == 4:
            for i in range(1000, 10000):
                a = int(i / 1000)
                b = int(i / 100) % 10
                c = int(i / 10) % 10
                d = int(i % 10)
                if a ** 4 + b ** 4 + c ** 4 + d ** 4 == i:
                    count += 1
                    sum2 += i
            return count, sum2
        if n == 5:
            for i in range(10000, 100000):
                a = int(i / 10000)
                b = int(i / 1000) % 10
                c = int(i / 100) % 10
                d = int(i / 10) % 10
                e = int(i % 10)
                if a ** 5 + b ** 5 + c ** 5 + d ** 5 + e ** 5 == i:
                    count += 1
                    sum2 += i
            return count, sum2


    try:
        n = int(input("请输入一个正整数(3<=n<=5):"))  # n是一个正整数N 3<=N<=5
        x, sum1 = sxh(n)
        print('{:d} {:d}'.format(x, sum1))
        print("你是否想退出:y/n")
        o = input()
        if o == 'y':
            break
    except TypeError:
        print("请输入一个3到5正整数")

 

计算素数和

本题要求计算输入两个正整数x,y(x<=y,包括xy)素数和。函数isPrime用以判断一个数是否素数,primeSum函数返回素数和。
输入格式:
输入两个整数。
输出格式:
[m-n]间的素数和
裁判测试程序样例:
/*请在这里填写答案*/
x,y =map(int, input().split()
print(primeSum(xy))

# -*- codeing = utf-8 -*-
# @Time : 2022/11/23 14:40
# @Author : 可乐不加糖
# @File : ji_suan_su_shu_he.py
# @Software: PyCharm
def isPrime(n):# 判断输入的数是否为素数
    if(n>1):
        a = 0
        for i in range(2, n):
            if(n % i == 0):
                a += 1
        if (a == 0):
            return n
        else:
            return 0
def primeSum(x, y):# 返回素数的和
    sum1 = 0
    for j in range(x, y+1):
        if(isPrime(j)):
            sum1 += j
    return sum1
try:
    x, y = map(int, input("请输入一个范围:").split())
    print(primeSum(x, y))
except ValueError:
    print("请重新输入")
  1. 计算Fibonacci数

 

实现一个计算Fibonacci数的简单函数,并利用其实现: 输入一个正整数n (0<n<100000),输出小于n的所有Fibonacci数。
所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均
定义为1)的数列,
例如: 1,1,2,3,5,8,13,21,…o
函数fib(n)用列表返回[1n]中的所有Fibonacci数。
函数接口定义:
def fib(n)
其中m,n是用户传入的参数 

# -*- codeing = utf-8 -*-
# @Time : 2022/11/23 20:09
# @Author : 可乐不加糖
# @File : Fibonacci.py
# @Software: PyCharm
'''
解题思路:题目中n表示斐波那契数的最大值,我先把n当作输出斐波那契数的个数,
        将输出的斐波那契数存放到列表list1中,然后再将列表list1中的元素
        取出来,一一与n作比较,将小于n的元素存放到列表list2中,返回list2
        即得到所有小于n的斐波那契数。
'''
def fib(n):
    list1 = [1]
    list2 = []
    if n < 0:
        a = 'error'
        return a
    if n == 1 :
        return list1
    if n == 2 :
        list1.append(1)
        return list1
    if n >= 3 :
        list1.append(1)
        for i in range(2, n):
            list1.append(list1[i - 1] + list1[i - 2])
        for i in list1:
            if i < n:
                list2.append(i)
        return list2
try:
    n = int(input("请输入一个正整数:"))
    fiblist = fib(n)
    print(fiblist)
except ValueError:
    print("请重新输入!")

 

  1. 实现isPrime函数

 

实现 isPrime0函数,参数为整数,要有异常处理。
如果整数是质数,返回True,否则返回 False。
# -*- codeing = utf-8 -*-
# @Time : 2022/11/23 21:34
# @Author : 可乐不加糖
# @File : isPrime.py
# @Software: PyCharm
'''
实现 isPrime0函数,参数为整数,要有异常处理。
如果整数是质数,返回True,否则返回 False。
'''
i = 1
while i > 0:
    def isPrime(n):  # 判断输入的数是否为素数
        if n > 0:
            if n > 1:
                a = 0
                for i in range(2, n):
                    if (n % i == 0):
                        a += 1
                if (a == 0):
                    return True
                else:
                    return False
            else:return False
        else:
            return '请输入一个正整数'


    try:
        n = int(input("请输入一个整数:"))
        print(isPrime(n))
        print("是否退出Y/N?")
        o = input()
        if o == 'Y':
            break
    except ValueError:
        print("请输入一个正整数")

  1. 使用datetime库,输出自己的生日

 

使用datetime库,对自己的生日输出不少于10种日期格式。
# -*- codeing = utf-8 -*-
# @Time : 2022/11/24 14:38
# @Author : 可乐不加糖
# @File : birthday.py
# @Software: PyCharm
'''
使用datetime库,对自己的生日输出不少于10种日期格式。except ValueError:
    print("d") try: ValueError: month must be in 1..12
    ValueError: year must be in 0000..9999
'''
from datetime import datetime
ID = input("请输入你的身份证号:")
count = 0
for i in ID:
    count += 1
if count != 18:
    print("个数错误,请重新输入!")
year = ID[6:10]; month = ID[10:12];day = ID[12:14]
try:
    birthday = datetime(int(year), int(month), int(day))
    print(birthday.strftime("你的生日是:%Y-%m-%d"))
    print(birthday.strftime('你的生日是:%x'))
    print(birthday.strftime("你的生日是:%Y-%B-%d"))
    print(birthday.strftime("你的生日是:%Y-%b-%d"))
    print(birthday.strftime("你的生日是:%Y/%m/%d"))
    print(birthday.strftime("你的生日是:%Y%m%d"))
    print(birthday.strftime("你的生日是:%Y::%m::%d"))
    print(birthday.strftime("你的生日是:%m月%d日--%Y年"))
    print(birthday.strftime("你的生日是:%Y-%m%b-%d"))
    print(f'你的生日是:{year}年{month}月{day}日')
except ValueError:
    print("month must be in 1..12,year must be in 0000..9999")


 

  1. 递归算法求解汉诺塔问题

 

汉诺塔是学习计算机递归算法的经典入门案例,该案例来源于真实故事。在世界某个地方有一个很虔诚
的宗教组织,其中僧侣维护着一项神圣任务:保持宇宙的时间。在时间的最开始,僧侣在平台上竖立了3
个垂直杆,在最左侧杆上有 64个不同半径的金色同心圆盘,直径较大的圆盘堆放在下方,形成了金字
塔样子的整体外观。僧侣们的任务是将所有圆盘从最左侧杆子移动到最右侧杆子上,这个宗教认为当僧
侣们完成任务的时候,万事万物将会化为乌有,宇宙将结束。为了保持神圣的顺序,僧侣们移动圆盘需
要遵从特定的规则:一次只能移动一个盘子、盘子只能在 3 个标杆之间移动、更大的盘子不能放在更小
的盘子上面。图 5.13 给出了汉诺塔问题的示例图,其中,3 个标杆分别用A、B和C表示
汉诺塔是一个数学难题,其问题描述为如何将所有圆盘从A移动到C。请用Python编写一个汉诺塔的移
动函数,采用递归方法解决这个难题,要求输入汉诺塔的层数,输出整个移动流程。
# -*- codeing = utf-8 -*-
# @Time : 2022/11/24 15:10
# @Author : 可乐不加糖
# @File : han_nuo_ta.py
# @Software: PyCharm
'''
汉诺塔是学习计算机递归算法的经典入门案例,该案例来源于真实故事。在世界某个地方有一个很虔诚
的宗教组织,其中僧侣维护着一项神圣任务:保持宇宙的时间。在时间的最开始,僧侣在平台上竖立了3
个垂直杆,在最左侧杆上有 64个不同半径的金色同心圆盘,直径较大的圆盘堆放在下方,形成了金字
塔样子的整体外观。僧侣们的任务是将所有圆盘从最左侧杆子移动到最右侧杆子上,这个宗教认为当僧
侣们完成任务的时候,万事万物将会化为乌有,宇宙将结束。为了保持神圣的顺序,僧侣们移动圆盘需
要遵从特定的规则:一次只能移动一个盘子、盘子只能在 3 个标杆之间移动、更大的盘子不能放在更小
的盘子上面。图 5.13 给出了汉诺塔问题的示例图,其中,3 个标杆分别用A、B和C表示
汉诺塔是一个数学难题,其问题描述为如何将所有圆盘从A移动到C。请用Python编写一个汉诺塔的移
动函数,采用递归方法解决这个难题,要求输入汉诺塔的层数,输出整个移动流程。
ValueError: invalid literal for int() with base 10: '2.5'
'''
def move(n, left, mid, right):
    global count
    if n == 1:
        print(f'{n}:{left}-->{right}')
        count += 1
    else:
        move(n-1, left, right ,mid)
        print(f'{n}:{left}-->{right}')
        count+=1
        move(n-1, mid, left, right)
try:
    n = int(input("请输入盘子的个数:"))
    count = 0
    move(n, 'A', 'B', 'C')
    print(f'共需要{count}步')
except ValueError:
    print("请输入正整数")

 

 

 

 

 

 

 

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年5月11日
下一篇 2023年5月11日

相关推荐