本人初期学习py时实现的小功能(11-20),自用,勿作评论

# 输入某年某月某日,判断这一天是这一年的第几天?(考虑闰年与大小月)

a=int(input("请输入年"))
b=int(input("请输入月"))
c=int(input("请输入日"))
if a%4==0 and a%100!=0 or a%400==0:
    if b==1:
        print(f"这是{a}年的第{c}天")
    elif b==2:
        print(f"这是第{a}年的第{c+31}天")
    elif b >= 3:
        if b%2!=0:
            print(f"这是第{a}年的第{c+31*(b//2)+29+30*(b//2-1)}天")
        else:
            print(f"这是第{a}年的第{c+31*(b/2)+29+30*(b/2-2)}天")
else:
    if b == 1:
        print(f"这是{a}年的第{c}天")
    elif b == 2:
        print(f"这是第{a}年的第{c + 31}天")
    elif b >= 3:
        if b % 2 != 0:
            print(f"这是第{a}年的第{c + 31 * (b // 2) + 28 + 30 * (b // 2 - 1)}天")
        else:
            print(f"这是第{a}年的第{c + 31 * (b / 2) + 28 + 30 * (b / 2 - 2)}天")
# 输入三个整数x,y,z,请把这三个数由小到大输出
print(sorted([int(input("请输入x")),int(input("请输入y")),int(input("请输入z"))]))
# 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
# 要求:输入n就能求出对于的第n项an与前n项和Sn

# 法一:
n=int(input("请输入n:"))
try:
    if n != 1:
        list=[0,1]
        def plus(a,b):
            c = a+b
            return c
        for i in range(n):
            global c
            c=plus(list[0],list[1])
            list[list.index(min(list))]=c
            if i == n-2:
                print(f"第n项an={min(list)}")
        print(f"前n项和Sn={c-1}")
    elif n==1:
        print("第n项an=0")
        print("前n项和Sn=0")
except:
    print("输入有误,n应为正整数")

# 法二:
a=0
b=1
list1=[0]
def p(a,b):
    c=max(a,b)
    return c,a+b
for i in range(1,int(input())):
    a,b=p(a,b)
    list1.append(min(a,b))
print(min(a,b))             #第n项的值
print(sum(list1))           #第n项的Sn的值
print(list1)                #每一项的值
# 判断101-200之间有多少个素数,并输出所有素数。
#提示:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

a=[]
import math
for i in range(101,201):
    if i%2!=0 and i%3!=0 and i%5!=0 and i%7!=0 and i%11!=0 and i%math.sqrt(i)!=0:
        print(i)
        a.append(i)
print("一共有",len(a),"个素数。")


#标准解法:
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(101,201):
    k = int(sqrt(m + 1))
    for i in range(2,k + 1):
        if m % i == 0:
            leap = 0
            break
    if leap == 1:
        print ('%-4d' % m)
        h += 1
        if h % 10 == 0:
            print ('')
    leap = 1
print ('The total is %d' % h)
#任意输入一串字符,统计字符中一个特殊字符,数字,英文字符,数字与其他符号的个数。


str1 = input("请输入一串字符串:")
exstr = input("请输入你想统计的特殊字符:")
list1=[]    #字符
list2=[]    #数字
list3=[]    #空格
list4=[]    #其他
for i in str1:
    try:
        list2.append(int(i))
    except:
        if type(i)==str:
            if i == " ":
                list3.append(i)
            elif i=="a" or i=="b" or i=="c" or i=="d" or i=="e" or i=="f" or i=="g" or i=="h" or i=="i" or i=="j" or i=="k" or i=="l" or i=="m" or i=="n" or i=="o" or i=="p" or i=="q" or i=="r" or i=="s" or i=="t" or i=="u" or i=="v" or i=="w" or i=="x" or i=="y" or i=="z" or \
                    i == "A" or i=="B" or i=="C" or i=="D" or i=="E" or i=="F" or i=="G" or i=="H" or i=="I" or i=="J" or i=="K" or i=="L" or i=="M" or i=="N" or i=="O" or i=="P" or i=="Q" or i=="R" or i=="S" or i=="T" or i=="U" or i=="V" or i=="W" or i=="X" or i=="Y" or i=="Z":
                list1.append(i)
            else:
                list4.append(i)
print(f"特殊字符{exstr}出现的次数为:{str1.count(exstr)}次")
print(f"这串字符中中英文字符有{len(list1)}个")
print(f"这串字符中数字有{len(list2)}个")
print(f"这串字符中空格有{len(list3)}个")
print(f"这串字符中其他字符有{len(list4)}个")


# 其他解法:
s = input("请输入一个字符串:")
letters = 0
space = 0
digit = 0
others = 0
for c in s:
    if c.isalpha():     #判断是否为英文字母
        letters += 1
    elif c.isspace():   #判断是否为空格
        space += 1
    elif c.isdigit():   #判断是否为数字
        digit += 1
    else:
        others += 1
print ("英文字母,空格,数字和其他字符的个数分别为:",letters,space,digit,others)
#编写一个程序,对输入的零钱,给出找零方案。可用的钱币的面值有50元,20元,10元,5元,2元,1元,5角,2角,1角,5分,2分,1分。
#例如输入为10001,则输出为2个50元,1个1分钱。

money = int(input("请输入零钱(单位:分):"))
print("需要找:",end='')
for i in [5000,2000,1000,500,200,100,50,20,10,5,2,1]:
    a = money//i
    money = money-i*a
    if a == 0:
        continue
    if i == 5000 or i == 2000 or i == 1000 or i == 500 or i == 200 or i == 100 :
        print(f"{a}张{int(i/100)}元",end=',')
    elif i == 50 or i == 20 or i == 10:
        print(f"{a}张{int(i/10)}角",end=',')
    else:
        print(f"{a}张{i}分", end=',')
# 需求:将一个数分解为质因数,如输入90,输出90=2*3*3*5
#
import math
try:
    list1 = []
    n = int(input("请输入一个整数:"))
    x = n
    if n%2!=0 and n%3!=0 and n%5!=0 and math.sqrt(n)%1!=0 or n <=3:
        print(f"{n}={n}")
    else:
        while n>=2:
            if n%2==0:
                n =n/2
                list1.append(2)
            elif n%3==0:
                n = n/3
                list1.append(3)
            elif n%5==0:
                n = n/5
                list1.append(5)
            elif math.sqrt(n)%1==0:
                list1.append(int(math.sqrt(n)))
                list1.append(int(math.sqrt(n)))
                break
            else:
                break
        list1.append(int(n))
        a = str(list1)
        b=a.replace("[","")
        c=b.replace("]","")
        d=c.replace(",","*")
        e=d.replace(" ","")
        print(f"{x}={e}")
except TypeError:
    print("输入有误,应输入整数")
#一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如28 = 1+2+4+7+14编程找出1000以内的所有完数。

for n in range(1,1001):
    list1=[]
    for i in range(1,n):        #循环1000以内的数作为除数,再循环1000以内的数作为被除数即可找出所有因子
        if n%i==0:
            list1.append(i)
    if sum(list1)==n:
        print(n,"\t",list1)
#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

h = 100
list1=[h]
for i in range(9):
    h = h/2
    list1.append(2*h)
print(f"共经过{sum(list1)}米")
print(f"第10次反弹{h}米")
#题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
# 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?

a = 1
for i in range(9):
    a = (a+1)*2
print(a)
# 运用逆向思维

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值