一些关于python的练习题(2)

文章介绍了四个Python函数:计算字符串长度及字符类型统计、判断回文串、整数相加和进制转换。同时展示了如何根据用户输入计算特定年份和月份的月历。
摘要由CSDN通过智能技术生成
(1)编写一个函数,参数为一个字符串,返回值为字符串长度以及字符串里面的大写字母,小写字母和数字的个数,共4个数字。
def str_c(str):
    lenth = len(str)
    number = 0
    big_word = 0
    small_word = 0
    for c in str:
        c = ord(c)                                       #使用ord函数找出字符对应的ascii码
        if(48<=c<=57):
            number += 1
        elif(65<=c<=90):
            big_word += 1
        elif(97<=c<=122):
            small_word +=1
    return lenth,big_word,small_word

str = input("请输入一个字符串")
lenth,big_word,small_word = str_c(str)
print(f"{str}的长度是{lenth},其中有{big_word}个大写字母,有{small_word}个小写字母")
(2)如果一个字符串正着读和反着读都一样,那它就是回本串。请写一个函数,参数为一个字符串,使用for循环,返回这个字符串是否为回文串。
def str_c(str):
    for i in range(0,len(str)//2):
        if(str[i] != str[-1-i]):
            return "该字符串不是回文数"
    else:
        return "该字符串是回文数"

str = input("请输入一个字符串")
s = str_c(str)
print(s)
(3)编写一个函数,输入不定长参数,将其中是整形的全部相加,忽略非整形的参数。
def add(*args):
    result = 0
    for ch in args:                 #遍历args
        if isinstance(ch, int):     #使用isinstance函数判断ch是否为整型数
            result += ch
    return result

print(add(1, 2, 3, 3.2, 78.3,'a',45))
(4)编写函数实现一个10进制数向n进制数之间的转换,其中n的取值范围为2~20。如果输入的目标进制n的值超过10,则使用字母来表示,字母为a~z或A~Z。
c = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K')   #使用元组做字母索引
#使用短除法求进制
def num_conversion(num,n):
    d = []                                                         #创建空元组,用来保存值,返回该元组
    while(1):
        d += c[num%n]                                              #求余数,放入列表
        num = int(num/n)                                           #更新自己
        if(num == 0 ):                                             #判断自己
            break
    d.reverse()                                                    #需要将列表倒叙
    return d

num,n =  input("请分别输入需要转换的数字和需要转化成的进制,以空格做分割\n").split()
num = int(num)                                                    #字符串转整型
n = int(n)
print(num_conversion(num,n))
(5)已知1800年1月1日是星期三,要求编写程序根据用户键盘输入的年份(≥1800)和月份,输出当月月历。
year,mon =  input("请输入年份和月份,以空格做分割\n").split()
year = int(year)                                                    #字符串转整型
mon = int(mon)
day_num = 0                                                         #该变量记录1800年一月一日到输入年月一号的天数
month_day = [31,28,31,30,31,30,31,31,30,31,30,31]                   #该列表记录每个月的天数(平年)
day_list=[None]*38                                                         #day_list一共35个元素,用于保存日历数据
for i in range(0,35):
    day_list[i] = " "                                                 #使用" "字符填充day_list

for i in range(1800,year):
    if (i % 4 == 0 and i % 100 != 0) or (i % 400 == 0):
        day_num += 366
    else:
        day_num += 365

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    month_day[1] = 0;                                              #如果当前年是闰年则改变2月天数

for i in range(1,mon):
    day_num += month_day[i]                                         #计算经过了多少天

week = (day_num+3)%7
#print(day_num)
#print(week)                                                          #计算是星期几,该变量表示填充列表时从哪里开始填充
for i in range(1,31+1):                                                 #填充列表
    day_list[week+i] = i
#计算第一天是星期几
print(f"您输入的年份是: {year}")
print(f"您输入的年份是: {mon}")
print(f"---------------------------------")
print(f"Sun  Mon  Tue  Wed  Thu  Fri  Sat")

for i in range(1,35):                                                  #0元素舍去,整个表是37个元素
    print("{:<5}".format(day_list[i]),end="")
    if(i% 7== 0 and i != 0):
        print("")

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值