首页 > 编程语言 >Python习题

Python习题

时间:2023-04-22 17:33:13浏览次数:40  
标签:输出 Python 单词 lst key print 习题 line

  • 文本词频统计

题目:

一篇文章,出现了哪些词?哪些词出现的最多?

请统计hamlet.txt文件中出现的英文单词情况,统计并输出出现最多的10个单词,注意:

(1) 单词不区分大小写,即单词的大小写或组合形式一样;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2) 请在文本中剔除如下特殊符号:!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(3) 输出10个单词,每个单词一行;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(4) 输出单词为小写形式。

'''
补充:
    dict.get(key[,value]),key是字典要查找的键,value是如果指定键的值不存在时,返回该默认值
    get() 方法 Vs dict[key] 访问元素区别:
    get(key) 方法在 key(键)不在字典中时,可以返回默认值 None 或者设置的默认值。
    dict[key] 在 key(键)不在字典中时,会触发 KeyError 异常。
'''
def getText():
    txt=open('hamlet.txt','r').read()
    txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt.replace(ch,' ')
    return txt
'''获取列表中的第二个元素
def getSecond(lst):
    return lst[1]
'''
hamlet=getText()
words=hamlet.split() # 以空格为分隔符,包含 \n,返回字符串列表
count={}
for word in words:
    count[word]=count.get(word,0)+1
items=list(count.items()) # 字典类型转化为列表类型
items.sort(key=lambda x:x[1],reverse=True)
#和上面的代码效果一样,都是指定第二个元素排序
#items.sort(key=getSecond,reverse=True)
for i in range(1):
    word,count=items[i] # 键值对表示在列表中是元组
    print(word)
  • 人名独特统计

题目:

编程模板中给出了一个字符串,其中包含了含有重复的人名,请去重后给出独特性人名的统计。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输出模板中字符串共有多少个独特人名。

s='''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 
       忽必烈 慕容复 张三丰 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 
       张三丰 令狐冲 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄'''
names=s.split() # split()方法返回的是一个列表
sset=set(names) # 集合中不允许有重复元素
print(len(sset))
  • 字符串翻转输出

题目:

读入一个字典类型的字符串,反转其中键值对输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

即,读入字典key:value模式,输出value:key模式。

输入格式

用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

给定字典d,按照print(d)方式输出

s=input()
try:
    d1=eval(s) #eval输出表达式的值,因为s是字典类型的字符串,所以eval会把它转化成字典
    d={}
    for key in d1:
        d[d1[key]]=key
    print(d)
except:
    print('输入错误')
  • 《沉默的羔羊》之最多单词(xxx没读懂代码)

题目:

附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。

输入格式   文件‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输出格式  字符串

import jieba
def getText():
    txt=open('沉默的羔羊.txt','r',encoding='utf-8').read()
    return txt
words=jieba.lcut(getText()) # jieba(“结巴”)是Python中一个重要的第三方中文分词函数库
d={}
maxCount=0
maxWord=''
for word in words:
    d[word]=d.get(word,0)+1
for key in d:
    if len(key)>2 and d[key]>maxCount:
        maxCount=d[key]
        maxWord=key
    if len(key)>2 and d[key]==maxCount and key>maxWord:
        maxWord = key
print(maxWord)
  • 数字不同数之和

获得用户输入的一个整数N,输出N中所出现不同数字的和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

例如:用户输入 123123123,其中所出现的不同数字为:1、2、3,这几个数字和为6。

s=input()
sset=set()
for i in s:
    sset.add(eval(i))
sum=0
for i in sset:
    sum+=i
print(sum)
  • 人名最多统计

题目:

编程模板中给出了一个字符串,其中包含了含有重复的人名,请直接输出出现最多的人名。

s='''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 
       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 
       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''
names=s.split()
d={}
for name in names:
    d[name]=d.get(name,0)+1
item=list(d.items())
item.sort(key=lambda x:x[1],reverse=True)
maxName,maxCount=item[0]
print(maxCount)
dict1 = {}
sum1 = 0
while True:
    str = input()
    lis = str.lower().split()
    if len(lis) == 0:
        continue
    else:
        if "!!!!!" in lis:
            break
        for i in lis:
            for q in "!.,:*?":
                i=i.replace(q, '')
            dict1[i] = dict1.get(i,0)+1
print(len(dict1))
sum1 = 0
for i in sorted(dict1.items(), key=lambda x: (-x[1], x[0])):    #对dict1先用item排序,然后将出来的列表中的每一个元组,用首项正排序,第二项逆排序
    if sum1 == 10:
        break
    print("%s=%s" % (i[0], i[1]))
    sum1 += 1
  • 统计文字中的单词数量并按出现次数排序

题目:

现在需要统计若干段文字(英文)中的单词数量,并且还需统计每个单词出现的次数。

注1:单词之间以空格(1个或多个空格)为间隔。

注2:忽略空行或者空格行。

统计前,需要从文字中删除指定标点符号!.,:*?。 注意:所谓的删除,就是用1个空格替换掉相应字符。

统计单词时需要忽略单词的大小写。

输入说明:

若干行英文,最后以!!!!!为结束。

输出说明:

单词数量

出现次数排名前10的单词(次数按照降序排序,如果次数相同,则按照键值的字母升序排序)及出现次数。

输入样例1:

failure is probably the fortification in your pole


it is like a peek your wallet as the thief when you

are thinking how to spend several hard-won lepta

         

when you are wondering whether new money it has laid

background because of you then at the heart of the

     

most lax alert and most low awareness and left it


godsend failed

!!!!!

输出样例1:

46

the=4

it=3

you=3

and=2

are=2

is=2

most=2

of=2

when=2

your=2

输入样例2:

Failure is probably The fortification in your pole!


It is like a peek your wallet as the thief when You

are thinking how to. spend several hard-won lepta.


when yoU are? wondering whether new money it has laid

background Because of: yOu?, then at the heart of the

Tom say: Who is the best? No one dare to say yes.

most lax alert and! most low awareness and* left it


godsend failed

!!!!!

输出样例2:

54

the=5

is=3

it=3

you=3

and=2

are=2

most=2

of=2

say=2

to=2

d={}
while True:
    s=input()
    lst=s.lower().split()
    if len(lst)==0:
        continue
    else:
        if '!!!!!' in lst:
            break
        for i in lst:
            for ch in '!.,:*?':
                i=i.replace(ch,'') # 特别注意:这里用 '' 替代,而不是' '
            d[i]=d.get(i,0)+1
print(len(d))
item=list(d.items())
item.sort(key=lambda x:(-x[1],x[0]))
cnt=0
for i in item:
    if cnt<10:
        print('%s=%d'%(i[0],i[1]))
        cnt+=1
  • 统计一段文字中的单词个数并按单词的字母顺序排序后输出

题目:

现需要统计若干段文字(英文)中的不同单词数量。

如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。

注1:单词之间以空格(1个或多个空格)为间隔。

注2:忽略空行或者空格行。

注3:单词大小写敏感,即'word'与'WORD'是两个不同的单词 。

输入说明:

若干行英文,最后以!!!!!为结束。

输出说明:

不同单词数量。

然后输出前10个单词(按字母顺序),如果所有单词不超过10个,则将所有的单词输出。

输入样例:

Failure is probably the fortification in your pole

It is like a peek your wallet as the thief when you

are thinking how to spend several hard-won lepta

when you Are wondering whether new money it has laid

background Because of you, then at the heart of the

most lax alert and most low awareness and left it

godsend failed

!!!!!

输出样例

49

Are

Because

Failure

It

a

alert

and

are

as

at

d={}
while True:
    s=input()
    lst=s.split()
    if len(lst)==0:
        continue
    else:
        if '!!!!!' in lst:
            break
        for i in lst:
            d[i]=d.get(i,0)+1
print(len(d))
item=list(d.items())
item.sort(key=lambda x:x[0])
cnt=0
for i in item:
    if cnt<10:
        print(i[0])
        cnt+=1
  • 生日悖论

题目:

生日悖论,指如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。尝试编程验证。

验证方法提示:使用从1到365的整数代表生日。测试n次,每次生成23个随机数,随机数的范围从1到365(包括365)。

然后查看有无重复的生日。

最后算出重复的比率。

输入格式:

随机数种子x 测试次数n

注意:需将x转换为整数型再进行设置。

输出格式:

rate=算出的比率,比率保留2位小数

输入样例:

3 1000

输出样例:

rate=0.54

'''
补充:1、设置了随机数种子之后,每次运行文件的输出结果都一样
    2、random.randint(start,stop) start<=随机数<=stop
'''
import  random
lst=input().split()
x=eval(lst[0])
n=eval(lst[1])
random.seed(x)
cnt=0
for i in range(n):
    sset = set()
    for j in range(23):
        a=random.randint(1,365)
        sset.add(a)
    if len(sset)<23:
        cnt+=1
print('rate=%.2f'%(cnt/n))
  • 从列表中删除元素

删除列表中所有符合条件的值。

输入格式:

输入n,代表要测试n次。每次测试:

首先,输入1行字符串(字符串内的元素使用空格分隔)

然后,输入要删除的元素x。

输出格式:

输出删除元素x后的每行字符串。如果元素全部被删除,则输出空行。

注意:行尾不得有多余的空格。

输入样例:

5

1 1 1 2 1 2 1 1 1

1

1 1 1 2 2 2 1 1 1

2

ab ab ab cd cd de de

ab

1 1 1 1

1

x y x x x z

t

输出样例:

2 2

1 1 1 1 1 1

cd cd de de


x y x x x z

n=eval(input())
for i in range(n):
    lst=input().split()
    x=input()
    l=len(lst)
    j=0
    while j<l:
        if lst[j]==x:
            del lst[j]
            l-=1 # 当删除了一个元素后,将列表的长度-1
        else:
            j+=1
    '''
    索引溢出,因为每删除一个元素,列表的长度是变化的,
    那么lst[i]必然会超出列表的索引范围:
    for j in range(len(lst)):
        if lst[j]==x:
            del lst[j]
    '''
    if len(lst)==0:
        print()
        continue
    for j in range(len(lst)):
        if j!=len(lst)-1:
            print(lst[j],end=' ')
        else:
            print(lst[j])
  • 随机密码生成器
'''
思路:
generate_password() 函数接受一个整数参数 length,表示要生成的密码长度,
然后利用 Python 标准库中的 random 和 string 模块生成随机密码。
string.ascii_letters 包含所有字母(大写和小写),string.digits 包含所有
数字,string.punctuation 包含所有标点符号。
random.choice(chars) 会从字符集chars中随机选择一个字符,
然后 join() 方法会将生成的字符拼接在一起形成密码。
补充:
random.choice( seq  ),seq -- 可以是一个列表,元组或字符串。
'''
import random
import string
def generate_password(length):
    # 定义密码可用字符集合
    chars = string.ascii_letters + string.digits + string.punctuation
    # 随机选择字符生成密码
    password = ''.join(random.choice(chars) for _ in range(length))
    return password
random_pwd = generate_password(6) # 输出长度为 6
print(random_pwd)
  • 连续质数计算

题目:

获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号 , 分割。

注意:用户输入的数字N可能是浮点数,都是正数;最后一个输出后不用逗号。

示例:

输入       12

输出    13,17,19,23,29

def isPrime(a):
    for i in range(2,a):
        if a%i==0:
            return False
    return True
n=eval(input())
a=int(n) # int(n) 将n变为整数,舍弃小数部分
a=a+1 if a<n else a #浮点数判断
cnt=0
while cnt<5:
    if isPrime(a):
        if cnt!=4:
            print(a,end=',')
        else:
            print(a)
        cnt+=1
    a+=1
  • 密码生成

题目:

以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码, 密码的每位是一个数字。每个密码单独一行输出。

产生密码采用random.randint()函数。

示例:

输入       3

输出    634

          524

          926

#注意题目要求是生成n位的密码
import random
random.seed(17)
n=eval(input())
for _ in range(3):
    print(random.randint(pow(10,n-1),pow(10,n)))
  • 天天向上的力量

题目:

工作日模式要努力到什么水平,才能与每天努力1%一样?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

A君: 一年365天,每天进步1%,不停歇 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

B君: 一年365天,每周工作5天休息2天,休息日下降1% ,要多努力呢?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

每周工作5天休息2天,计算工作日的努力参数是多少才能与每天努力1%一样。

要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(1) ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬一年365天,以第0天的能力值为基数,记为1.0;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2) ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬当好好学习时,能力值相比前一天提高1%;当没有学习时,由于遗忘等原因能力值相比前一天下降1%;  

输出

输出结果格式如下:(其中结果保留小数点后三位,冒号后有一个空格)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

工作日的努力参数是: 0.019

def dayUp(df):
    dayup=1.0
    for i in range(365):
        if i%7 in [6,0]:
            dayup*=(1.0-0.01)
        else:
            dayup*=(1+df)
    return dayup
dayfactor=0.01
while dayUp(dayfactor)<37.8:
    dayfactor+=0.001
print('%.3f'%dayfactor)
  • 天天向上的能力增长模型

题目:

一年365天,以第1天的能力值为基数,记为1.0,尽管每天坚持,但人的能力发展并不是无限的,他符合特定模型。假设能力增长符合如下带有平台期的模型:以7天为周期,连续学习3天能力值不变:从第4天开始至第7天每天增长为前一天的1%,如果7天中有1天间断学习,则周期从头计算。请编写程序回答,如果初始能力值为1,固定每n天休息1天,365天后能力值是多少?注意:1月1日是第一天开始基数为1,即1,2,3天不变,第4天增长。

输入格式:

输入一个整数n,表示每n天休息一天。

输出格式:

输出为一行,表示365天后的能力值 ,保留2位小数。

输入样例:

10

输出样例:

3.72

n=eval(input()) # 每 n 天休息一天
dayup=1.0
dayfactor=0.01
cnt=0 # 关键:计数器
ans=1.0
for i in range(365):
    if i%(n+1)==0: # 休息
        cnt=0 # 工作过的天数清零
        continue
    cnt+=1 #工作一天
    if cnt%7==1: # 7天为一个周期
        cnt=1 # 工作7天后再工作重新从1开始
    if cnt>3:
       ans*=(dayup+dayfactor)
print('%.2f'%ans)
  • 文件行数

题目:打印输出附件文件的有效行数,注意:空行不计算为有效行数。

'''
补充:
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
'''
txt=open('l.log') #文件名随手写的
cnt=0
for line in txt:
    # for line in txt方式获得的每行内容(在变量line中)包含换行符,所以,要通过strip()函数去掉换行符后再进行统计。这里,空行指没有字符的行。
    line=line.strip('\n')
    if len(line)!=0:
        cnt+=1
print(cnt)
  • 文件字符分布

题目:

统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

同时请输出文件一共包含的字符数量。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

注意输出格式,各元素之间用英文逗号(,)分隔。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。

'''
补充:ord函数是chr的配对函数,返回值是对应的的ASCII值
'''
f=open('l.log') # 文件名随手写的
d={}
cnt=0
#注意:下面这两行代码一定不能少,因为有的字符可能不出现,d里就没有对应的键,检查的时候就会造成键错误
for i in range(26):
    d[chr(ord('a')+i)] = 0
for line in f:
    #line=line.strip('\n') 假设有n行,那么加上这行代码后字符总数就会减少n-1个
    for c in line:
        d[c]=d.get(c,0)+1
        cnt+=1
print('一共有%d个字符'%cnt,end='')
for i in range(26):
    if d[chr(ord('a')+i)]!=0:
        print(',%s:%d'%((chr(ord('a')+i)),d[chr(ord('a')+i)]),end='')
  • 文件独特行数(随便看看得了,别纠结,感觉这道题说的都不清楚)

题目:

统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。

'''
该题本质是个数学问题:文件一共有n行,集合化后行数为m,去除重复行,重复行的数量为n-m
集合中的元素有重复行、独特行,独特行的数量为 m-(n-m)
'''
f=open('l.log')
lst=f.readlines() #会把换行符也读进来
# 特别注意:调用readlines()函数之后,指针指向了文件尾,一定要seek(0)
f.seek(0)
n=len(lst)
sset=set()
for line in f:
    line=line.strip('\n')
    sset.add(line)
m=len(sset)
print('一共有%d个独特行'%(2*m-n))
  • CSV格式列变换

题目:

附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。

'''
补充:
1、逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
2、lst[1]  # 读取下标为1的元素
  lst[-1]  # 读取倒数第一个元素
  lst[::-1]  # 省略开始和结束下标,步长为-1,逆序取出列表的值
  lst[:-1]   # 除了最后一个元素,取其余的全部元素
  lst[1::-1]  # 取从正向下标为1的元素开始到结束的逆序元素
'''
f=open('data.csv')
for line in f:
    line=line.strip('\n')
    lst=line.split(',')
    lst=lst[::-1]
    print(''.join(lst))
    '''上面的一行代码与:
    for i in lst:
        print(i,end='')
    效果一致'''
f.close()
  • CSV格式清洗

题目:

附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2)清洗后打印输出  

f=open('data.csv').read()
s=f.read() # 注意不要忘了read(),read()函数的返回值类型是字符串
s=s.replace(' ','')
print(''.join(f))
f.close()
  • 文本的平均列数

题目:

打印输出附件文件的平均列数,计算方法如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(1)有效行指包含至少一个字符的行,不计算空行;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2)每行的列数为其有效字符数;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。

'''
补充:Decimal是一个精确小数计算的模块,结合round函数精确四舍五入:
from decimal import Decimal
print(round(Decimal("1.535"),2))
print(round(Decimal("1.335"),2))
'''
#from decimal import Decimal
f=open('l.log')
row=0;
col=0
for line in f:
    line=line.strip('\n')
    if len(line)!=0:
        row+=1
        col+=len(line)
print('%.0f'%(col/row)) # 等价于 print(round(Decimal(col/row),0))
  • CSV格式清洗与转换

题目:

附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(1)按行进行倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2)每行数据倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(3)使用分号(;)代替逗号(,)分割数据,无空格;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

按照上述要求转换后将数据输出。  

f=open('data.csv')
lst=f.readlines()
lst=lst[::-1]
for line in lst:
    line=line.strip('\n')
    line=line.replace(' ','')
    line=line.replace(',','') #或者line=line.split(,)
    line=line[::-1]
    print(';'.join(line))
f=f.close()
  • 数字的鲁棒输入

题目:

获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

要求:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(1)无论用户输入何种内容,程序无错误;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

(2)如果输入有误,请输出"输入有误"。

'''
注意:
complex()和complex(eval())之间的比较将能够排除非数字类型的输入。
注意:不能直接使用eval(),否则,用户可以通过输入表达式(如100**2)输入数字,
与要求不同(在实际应用中带来安全隐患)
'''
num=input()
try:
    if complex(num)==complex(eval(num)):
        print(eval(num)**2)
except:
    print('输入有误')

标签:输出,Python,单词,lst,key,print,习题,line
From: https://blog.51cto.com/u_15470952/6215413

相关文章

  • 【m3u8】python使用m3u8库下载视频
    1、m3u8库https://pypi.org/project/m3u8/ 2、安装pipinstallm3u8  3、使用importtimefromCrypto.Util.PaddingimportpadfromCrypto.CipherimportAESimportrequestsimportm3u8headers={"User-Agent":"Mozilla/5.0(WindowsNT10.......
  • 【Python】尝试切换py版本
    失败问chatgpt,怎么把abaquspython版本切换到py3.6,结果失败。chatgpt给出的建议:修改abaqus_v6.env,明显扯淡!我就尝试在custom_v6.env中添加python路径,结果就是开头的报错。其他有用的回答:怎么查看abaqus2020当前使用的Python的版本信息importsysprint(sys.version)......
  • Python基础—conda使用笔记
    Python基础—conda使用笔记1.环境配置由于用conda管理虚拟环境真滴很方便,所以主要使用conda,就不单独去装Python了。1.1.Miniconda3安装Miniconda3官网下载地址:MinicondaMiniconda3清华镜像下载:清华镜像-Miniconda对于Windows系统:Miniconda安装跟正常的软件安装是一样......
  • python学习-学生信息管理系统并打包exe
    在B站自学Python站主:Python_子木授课:杨淑娟平台:马士兵教育python:3.9.9python打包exe文件#安装PyInstallerpipinstallPyInstaller#-F打包exe文件,stusystem\stusystem.py到py的路径,可以是绝对路径,可以是相对路径pyinstaller-Fstusystem\stusystem.py学生信息管理......
  • Python | setattr函数的使用
    在Python中,setattr()是一个内置函数,用于设置对象的属性值,该属性不一定是存在的。语法setattr()的语法如下:setattr(obj,name,value)其中,obj是要设置属性值的对象,name是要设置的属性名,value是要设置的属性值。返回值为无。示例用法示例一:classPerson:def__in......
  • python opencv Sharpened
    pythonopencvSharpened importcv2importnumpyasnp#Loadtheimageimg=cv2.imread('20230222100736979.jpg')#Definethesharpeningkernelkernel=np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])#Applythekerneltotheimagesharpened......
  • python对于虚拟环境的管理
    venv和conda的区别venv和conda都是用于创建虚拟环境和管理包的工具,但它们之间有一些不同。Python3.3以上,venv是内置的。它会直接在当前项目(当前文件夹下)安装Python虚拟环境,因此它是“去中心化”管理的,无法查看已安装的所有环境。conda是一个跨平台的开源包管理器,可以......
  • python-docx高级用法
    fromdocximportDocumentfromdocx.enum.sectionimportWD_SECTION#创建一个新文档doc=Document()#添加页眉header=doc.sections[0].headerheader.add_paragraph('Headertext')#添加页脚footer=doc.sections[0].footerfooter.add_paragraph('Footertext')#......
  • python数据挖掘与分析实战__电子商务网站用户行为分析及服务推荐
    importosimportpandasaspd#修改工作路径到指定文件夹os.chdir("D:/CourseAssignment/AI/CollectWebDate/")#第一种连接方式fromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8')sql......
  • python-pptx用法
    frompptximportPresentation#创建一个新PPT文档prs=Presentation()#添加幻灯片slide=prs.slides.add_slide(prs.slide_layouts[0])#保存PPT文档prs.save('example.pptx')frompptx.utilimportInches#添加文本框slide=prs.slides.add_slide(prs.slide_layouts[1])t......