Python:难题多例(判断某一天是某年的第几天,输出一百以内的孪生素数,附加条件的全排列,将十进制整数,小数转化为N进制整数,小数等)

 写在前面:文章中的例子均来自于学校发布的大计基作业,整理在此处以作备忘复习之用

1.输入某年某月某日,判断这一天是这一年的第几天,程序中要对输入的年份、月份和日是否有效进行判断。

程序如下:

#输入和判断部分

#对年份的判断
while True:
    year=int(input('请输入您要查询的年份(公元后):'))
    if year<0:
        print('你输入的年份有误,请重新输入')
        continue
    else:
        break
runyear=0
pingyear=0
if year%4==0 and year%100!=0 or year%400==0:
    runyear=year
else:
    pingyear=year
    
#对月份的判断    
while True:
    month=int(input('请输入您要查询的月份:'))
    if month<=0 or month>12:
        print('你输入的月份有误,请重新输入')
        continue
    else:
        break
daymax=0
Damonths=[1,3,5,7,8,10,12]
Zhongmonths=[4,6,9,11]
for Damonth in Damonths:
    if month==int(Damonth):
        daymax=31
for Zhongmonth in Zhongmonths:
    if month==int(Zhongmonth):
        daymax=30
    if month==2:
        if year==runyear:
            daymax=29
        else:
            daymax=28

#对日期的判断
while True:
    day=int(input('请输入您要查询的日期:'))
    if day<=0 or day>daymax:
        print('你输入的日期有误,请重新输入')
        continue
    else:
        break

#计算部分
daybymonth=[31,28,31,30,31,30,31,31,30,31,30,31]
daysum=0
if year%4==0 and year%100!=0 or year%400==0:
    daybymonth[1]=29
for i in range(month-1):
    daysum=daysum+int(daybymonth[i])
daysum=daysum+day
print('这一天是这一年的第{}天'.format(daysum))

结果示例:

============== RESTART: C:\Users\python小程序\1.py =============
请输入您要查询的年份(公元后):2022
请输入您要查询的月份:11
请输入您要查询的日期:25
这一天是这一年的第329天

2.输出100以内的孪生素数,判断素数部分单独编写为一个函数,孪生素数是指相差为2的素数,例如3和5,11和13等。

程序如下:

#判断是否为素数
def CheckS(x):
    num=0
    for i in range(2,x):
        if x%i==0:
            num=num+1
    if num==0:
        result=x
    else:
        result=None
    return result

#找出百内素数
Sushu=[]
for x in range(2,101):
    if CheckS(x)!=None:
        Sushu.append(x)

for i in range(len(Sushu)):
    if i==len(Sushu)-1:
        break
    if Sushu[i+1]-Sushu[i]==2:
        print(Sushu[i],Sushu[i+1],sep='  ')

结果示例:

============== RESTART: C:\Users\python小程序\1.py =============
3  5
5  7
11  13
17  19
29  31
41  43
59  61
71  73

3.输入一个小于等于1000的整数总金额,等价的表示成各种面额的张数,使得张数最少,可以提供的面额分别是100、50、20、10、5、1元。

例如输入145时,输出如下:

100 圆: 1 张

20圆: 2 张

5圆: 1 张

程序如下:

while True:
    money=int(input('请输入总金额数(不大于1000):'))
    if money<0 or money>1000:
        print('您输入的金额不在范围内,请重新输入')
        continue
    else:
        break
    
Bai=money//100
money_1=money%100

Wushi=money_1//50
money_2=money_1%50

Ershi=money_2//20
money_3=money_2%20

Shi=money_3//10
money_4=money_3%10

Wu=money_4//5
money_5=money_4%5

Yi=money_5//1

print('一百元:{}张'.format(Bai))
print('五十元:{}张'.format(Wushi))
print('二十元:{}张'.format(Ershi))
print('十元:{}张'.format(Shi))    
print('五元:{}张'.format(Wu))
print('一元:{}张'.format(Yi))

结果示例:

============== RESTART: C:\Users\python小程序\1.py =============
请输入总金额数(不大于1000):999
一百元:9张
五十元:1张
二十元:2张
十元:0张
五元:1张
一元:4张

4.将数字1~6分别填入连续的6个方格中,使得相邻的两个数字之和为素数,输出所有满足条件的组合。例如,其中一种组合是:4 1 6 5 2 3

程序如下:

from typing import List
 
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []  # 用来存放满足条件的列表集合
        path = []  # 合成满足条件的列表
        Q=0
 
        def backtrack(nums):
            if len(path) == len(nums):
                return res.append(path[:])  # 此时说明找到了一组,可以回溯了
            for i in range(0, len(nums)):
                if nums[i] in path:  # path里已经收录的元素,直接跳过
                    continue
                if len(path)>=1:   #与前一项加和不为素数的元素,直接跳过
                     Q=path[len(path)-1]+nums[i]
                     num=0
                     for k in range(1,int(Q/2)+1):
                         if Q%k==0:
                             num=num+1
                     if num!=1:
                         continue
                path.append(nums[i])
                backtrack(nums)  # 递归
                path.pop()  # 回溯
 
        backtrack(nums)
        return res
 
s = Solution()
print(s.permute([1, 2, 3,4,5,6]))

结果示例:

[[1, 4, 3, 2, 5, 6], [1, 6, 5, 2, 3, 4], [2, 3, 4, 1, 6, 5], [2, 5, 6, 1, 4, 3], [3, 2, 5, 6, 1, 4], [3, 4, 1, 2, 5, 6], [3, 4, 1, 6, 5, 2], [4, 1, 6, 5, 2, 3], [4, 3, 2, 1, 6, 5], [4, 3, 2, 5, 6, 1], [5, 2, 3, 4, 1, 6], [5, 6, 1, 2, 3, 4], [5, 6, 1, 4, 3, 2], [6, 1, 4, 3, 2, 5], [6, 5, 2, 1, 4, 3], [6, 5, 2, 3, 4, 1]]
Press any key to continue . . .

5.编写函数,将十进制整数转换为N进制形式,N小于等于16,结果用字符串表示,在主程序中输入十进制整数和要转换的进制,调用该函数转换为N进制数,要求通过除以N取余的运算转换。

    例如,某次的运行结果如下:

输入要转换的十进制数字:256

要转换的进制(<=16):16

转换后的16进制为:100

    另一次的运行结果如下:

输入要转换的十进制数字:256

要转换的进制(<=16):8

转换后的8进制为:400

程序如下:

def Change(x,N):

    #确定转化后的N进制数有多少位
    a1=0
    a2=x
    while a2>=1:
        a2=a2//N
        a1=a1+1

    #确定转化后的N进制数各位数值
    b1=0
    b2=x
    temporary=[]
    for i in range(a1):
        b1=b2%N
        temporary.append(str((int(b1))))
        b2=(b2-b1)/N
    temporary.reverse()

    for k in range(a1):
        if temporary[k]=='10':
            temporary[k]='A'
        if temporary[k]=='11':
            temporary[k]='B'
        if temporary[k]=='12':
            temporary[k]='C'
        if temporary[k]=='13':
            temporary[k]='D'
        if temporary[k]=='14':
            temporary[k]='E'
        if temporary[k]=='15':
            temporary[k]='F'
            break

    answer="".join(temporary)

    result=answer
    return result


x=int(input("Please enter the decimal integer you want to convert:"))
while True:
    N=int(input("Please enter the base you want to convert to"))
    if N>16 or N<=0:
        print("The base you selected is out of range, please re-enter it")
        continue
    else:
        break
print("The final answer is :",Change(x,N))

结果示例:

Please enter the decimal integer you want to convert:31
Please enter the base you want to convert to16
The final answer is : 1F

Please enter the decimal integer you want to convert:203
Please enter the base you want to convert to8
The final answer is : 313

6.编写函数,将十进制小数转换为N进制小数,N小于等于16,最多转换到小数点后4位。编写主程序,输入小数和要转换的进制,调用该函数转换为N进制数。

注意,需要使用乘N取整的方法。

例如,某次的运行结果如下:

输入要转换的十进制小数:0.625

要转换的进制(<=16):2

转换后的2进制为:0.101

    另一次的运行结果如下:

输入要转换的十进制小数:.3456

要转换的进制(<=16):2

转换后的2进制为:0.0101

程序如下:

def Change(x,N):
    a1=x
    temporary=[]

    while True:
        if len(temporary)>=4:
            break
        a1=a1*N
        if a1>=1.0:
            a2=int(a1)
            if a2<=10:
                a2=str(a2)
            if a2==10:
                a2="A"
            if a2==11:
                a2="B"
            if a2==12:
                a2="C"
            if a2==13:
                a2="D"
            if a2==14:
                a2="E"
            if a2==15:
                a2="F"

            temporary.append(a2)
            a1=a1-int(a1)
            continue
        elif 0<a1<1.0:
            temporary.append('0')
            continue
        else:
            break
        
    temporary.insert(0,'0.')
    answer=''.join(temporary)
    result=answer
    return result

x=float(input("请输入您要转化的十进制小数:"))
while True:
    N=int(input("请输入您要转化为的进制(十六进制以内):"))
    if N>16 or N<=0:
        print("您输入的数值超出了范围,请重新输入")
        continue
    else:
        break
    
a=Change(x,N)
print('结果为:',a)

结果示例:

============== RESTART: C:\Users\python小程序\2.py =============
请输入您要转化的十进制小数:0.3456
请输入您要转化为的进制(十六进制以内):2
结果为: 0.0101

============== RESTART: C:\Users\python小程序\2.py =============
请输入您要转化的十进制小数:0.1253
请输入您要转化为的进制(十六进制以内):16
结果为: 0.2013

============== RESTART: C:\Users\python小程序\2.py =============
请输入您要转化的十进制小数:0.3253
请输入您要转化为的进制(十六进制以内):13
结果为: 0.42C8

例毕

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉普拉斯小妖精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值