当前位置:主页 > 查看内容

非计算机专业同学的Python自我修养-3

发布时间:2021-04-06 00:00| 位朋友查看

简介:非计算机专业同学的Python自我修养-3 记录本科大一下的学习过程 WEEK-5例题 Ps:用手机看效果打折扣 Q1统计高于平均分的人数 特别鸣谢XRJGG 【问题描述】 从若干学生成绩中统计高于(严格的大于)平均分的人数用-1做为学生成绩数据的结束标志。如果没有输入成绩……

非计算机专业同学的Python自我修养-3

记录本科大一下的学习过程

WEEK-5例题

Ps:用手机看效果打折扣

Q1:统计高于平均分的人数

特别鸣谢:XRJGG
【问题描述】

从若干学生成绩中统计高于(严格的大于)平均分的人数,用-1做为学生成绩数据的结束标志。如果没有输入成绩,则输出0。

【输入形式】

一组学生的成绩

【输出形式】

高于平均分的学生人数
#样例输入
70 50 80 -1
#样例输出
2

代码:

a=input().split(' ')  #这里的a是list形式
score=0
number=0
if a[0] != '-1':#如果输入的值是-1,那么直接去最后面的else输出0
    
    for i in a:         
            i=int(i)    #这里把i从str变成int格式
            score += i  #score会把之前的数全部加起来
            number += 1 #number统计输入数字个数
    average_score=(score+1)/(number-1)
    greater=0
#这里再次使用for in 不得不说 真的可
    for j in a:
        j=int(j)
        if j > average_score :
            greater += 1
    print(greater)   #同理,可print

else:#为什么要把else放在后面和第一个if并列?
#不把else放在后面,前面统计number=0,而0作除数时会报错
    print('0')

X设计的代码还是非常巧妙。
输出示例:無


Q2:逆序排列

【问题描述】

编写程序对标准输入的10个整数置逆序排列并输出。        

【输入形式】

标准输入的前十行代表参与计算的十个整数。

【输出形式】

标准输出的一行表示逆序后的数组,以空格作为间隔。

#样例输入
1
2
3
4
5
6
7
8
9
10
#样例输出
10 9 8 7 6 5 4 3 2 1

代码:

a = []    #这题依旧使用list做法
count=0
while True:
    integer = input()  #把input放在while下面实现分行输入
    a.append(integer)  #str.append(),输入数字依次放在a中
    count +=1
    if count == 10:    #计数.当满足10个数字时打断输入
        break
a.reverse()    #reverse语句,很方便的实现倒叙排列
#这里其实也用了格式化切片[::-1],但是效果不好,仅限个位数。你输入的90会变成09,109会变成901.
a=' '.join(a)  #将list转换为字符串
print(a)

**输出示例:无


Q3: Python日期格式转换程序

来源:python求输入某年某月某日,判断这一天是这一年的第几天

【问题描述】

输入“05/24/2003”,输出日期“May 24,2003.”

提示:12个月份英文名字符串,构成一个列表

算法:

(1)输入日期,格式为:mm/dd/yyyy格式,并保存在dateStr变量中;

(2)利用斜杠分离日期信息,将dateStr分成月份、日期、年份的字符串 (提示:split)

(3)将月份的字符串转换为月份数字;

(4)利用数字月份查找这个月份的名称;

(5)创建一个新的日期字符串,格式为:月份,日期,年份

(6)输出这个新的日期字符串

【输入形式】

输入日期,格式为:mm/dd/yyyy格式

【输出形式】

输出新的日期字符串,格式为:月份,日期,年份
#样例输入(仅日期)
Enter a date (mm/dd/yyyy):11/13/2003
#样例输出
The converted date is:November 13,2003

代码:

date=input('Enter a date (mm/dd/yyyy):')
mm=int(date[0:2])
dd=date[3:5]
yyyy=date[6:10]
temp=['January','February','March','April','May','June','July','August','September','October','November','December']
month=temp[mm-1:mm]
month=''.join(month)
print('The converted date is:',month,' ',dd,',',yyyy,sep='')

这题还算简单,我用了类似字典?的做法,利用格式化切片去定位月份,然后列表转字符串。


Q4:数列翻转

【问题描述】

编写程序对列表中的数据进行翻转转换,即将数组中第一个数和最后一个数交换、第二个数和倒数第二个数交换,依此类推。

建议使用列表的reverse方法。在搜索引擎输入“python reverse”可以检索到该方法的用法描述。

【输入形式】

数组元素的个数(n) 以及n个整数,采用空格隔开它们 

【输出形式】

交换以后的数组,采用空格隔开它们 

【样例输入】

4 100 200 300 400 

【样例输出】

 400 300 200 100

代码:

list1=[]

lista1=list(input().strip().split())

lista2=list1[1:]

number=int(list1[0])

for i in range(number,0,-1): 
  print(list1[i],end=' ')

这里没有用推荐的reserve方法,reserve应该更简单。
这里使用的是for in 倒叙 也有可取之处


Q5: 一年中第几天

【问题描述】

 输入某年某月某日,判断这一天是这一年的第几天?程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天。

特殊情况:闰年且输入月份大于3时需考虑多加一天。 

提示:(1) 闰年的2月有29天,平年的2月有28天; 

          (2) 如果年份满足以下两个条件之一,则该年就是闰年。 

         i) 年份能被4整除且不能被100整除 

         ii) 年份能被400整除 

【输入形式】

输入一行,一行三个整数,用空格隔开,分别代表年月日。如2012 2 7  

代表2012年2月7日。注意,不要输入任何汉字。 

【输出形式】

输出只有一个数字,即所对应的日期是该年的第几天。 
#样例输入
2012 1 1 
#样例输出
1

代码:

year,month,day=map(int,input().split(' ')) #这样都是int格式,也可以运用到前面几题中
    
day += (month-1) * 30#将月数转化为日
if month < 9:
    day += month//2
else:
    day += (month+1)//2

if month > 2:
    if year%400 ==0 or year%4 == 0 and year%100 !=0 :
        day -= 1
    else:
        day -= 2
print(day)

下面是输出示例
这个代码运用的非常巧妙,完美诠释了这首歌:
一三五七八十腊,三十一天永不差; 四六九冬是小月,唯有二月二十八。
细品吧


Q6:Fib数列计算

来源忘记了,后面可补上
使用的新函数已经记下了

【问题描述】

 一个整数数列,它的第一项是m,第二项是n,以后每项都是前两项之和。

    例如数列:1,1,2,3,5,8,13,21......

   编写程序,输入整型数值m和n,求解该数列,保存到一个列表,求前20项之和并输出。

【输入形式】

    输入的第一行表示m的值;
    输入的第二行表示n的值。

【输出形式】

 输出该数列的前20项的和。若输入数据含小数,则输出"illegal input"。
#样例输入
1
1
#样例输出:
17710

代码:

a=eval(input())
b=eval(input())
count=0
d=a+b
if isinstance(a,int)==False or isinstance(b,int)==False: #判断输入的对不对
    print('illegal input')
else:
      while count < 18:#因为已经输入了2个数,后面进行计算只要重复18遍
         c = a + b     #c会将前两个数字加起来
         a = b
         b = c         #这两行相当于将a 和b 整体向后移了一位
         d += c        #d是统计所有的
         count += 1
      print(d)

经典的斐波那契数列
isinstance() 函数用于
:判断一个对象是否是一个已知的类型


Q7:统计字符串中小写字母个数最多的字符

来源:python找出一个字符串中出现次数最多的字_第十一届蓝桥杯Python组第二场试题
【问题描述】

输入小写字符串,输出字符串中出现次数最多的字母及其出现次数。如果有多个字母出现次数一样,则按字符从小到大顺序输出字母及其出现次数。

【输入形式】

 一个字符串。

【输出形式】

 出现次数最多的字母及其出现次数
#样例输入
abcccddd
#样例输出:
c 3
d 3

代码:

cnt = [0]*26#cnt是一个拥有26个‘0’的list,对应26个字母
s = input()
for alpha in s:
    cnt[ord(alpha) - ord('a')] += 1 #这里转换为ord,找出数字差用于切片
#如果alpha=a,那么你的cnt第一个0就会+1
#同理,如果alpha=c,那么第三个数将会+1

for i in range(26):
    if cnt[i] >= max(cnt):
#重新看一下cnt这个list。如果出现2个字母相同的情况,也能print出来
       print(chr(i+ord('a')),cnt[i])

这个题用的方法跟上周的凯撒加密差不多,比凯撒加密更简单。
2021/4/2 18:26已更新

;原文链接:https://blog.csdn.net/xiaoyequlove/article/details/115402408
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐