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

非计算机专业同学的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

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=(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=(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)

下面是输出示例

这个代码运用的非常巧妙,完美诠释了这首歌:

一三五七八十腊,三十一天永不差; 四六九冬是小月,唯有二月二十八。

细品吧

efaac32997910fb3dcb3f7bd0ed6b16c.png

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:

< 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已更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值