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