Python 中国慕课第五章测试 OpenJudge作业(包含通过码)

您所在的位置:网站首页 python第5章答案 Python 中国慕课第五章测试 OpenJudge作业(包含通过码)

Python 中国慕课第五章测试 OpenJudge作业(包含通过码)

2023-09-05 05:12| 来源: 网络整理| 查看: 265

 

描述

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?

输入

输入包含三行。 第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。 第二行包含NA个整数,表示小A出拳的规律。 第三行包含NB个整数,表示小B出拳的规律。 其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。

输出

输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。

通过码文件:bc035ecb44fb395bb7018d240c98cf8deff9f69efcf3da17f2b049d297021091

代码:

def result(a,b): if a == b: return 0 if a == 5 and b == 0: return 1 if a == 0 and b == 5: return -1 if a < b: return 1 else: return -1 s = input().split() n,na,nb = int(s[0]),int(s[1]),int(s[2]) sa = input().split() # A的规律 sb = input().split() # B的规律 winA = winB = 0 # A和B赢的次数 ptrA = ptrB = 0 # A和B打平的次数 for i in range(n): r = result(int(sa[ptrA]), int(sb[ptrB])) # 比赛结果 if r == 1: winA += 1 elif r == -1: winB += 1 ptrA = (ptrA + 1) % na ptrB = (ptrB + 1) % nb if winA > winB: print("A") elif winA < winB: print("B") else: print("draw")

032:统计数字字符个数

总时间限制: 

1000ms

内存限制: 

65536kB

描述

输入一行字符,统计出其中数字字符的个数。

输入

一行字符串,总长度不超过255。

输出

输出为1行,输出字符串里面数字字符的个数。

样例输入

Peking University is set up at 1898.

样例输出

4

通过码:867e9d67dfc2070cbae928920048e8c98647b4bb3dedaca8d19bf81786e9b435

代码

str1 = input() sum=0 i=0 while i < len(str1): if str1[i].isdigit(): sum += 1 i += 1 print(sum)

通过码:6a6c69b9b32f69a457b648716762ab9d887d9d9feba348d6051cc0844a9dbb3d 

033:大小写字母互换​​​​​

总时间限制: 

1000ms

内存限制: 

65536kB

描述

把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母。

输入

输入一行:待互换的字符串。

输出

输出一行:完成互换的字符串(字符串长度小于80)。

样例输入

If so, you already have a Google Account. You can sign in on the right.

样例输出

iF SO, YOU ALREADY HAVE A gOOGLE aCCOUNT. yOU CAN SIGN IN ON THE RIGHT.

 

代码:

s = input() for i in s: if i.isupper(): print(i.lower(),end="") elif i.islower(): print(i.upper(),end="") else: print(i,end='')

 

034:过滤多余的空格

描述

一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。

输入

一行,一个字符串(长度不超过200),句子的头和尾都没有空格。

输出

过滤之后的句子。

样例输入

Hello world.This is c language.

样例输出

Hello world.This is c language.

通过码:9a05d95a008fb8f44f14e6a98e7d13c90ecf671cadb6dbcad610a649ddb37e92 

代码:

tmpStr = input() flag = False #前面一个字符是空格的标识符,False表示前面的字符不是空格 for i in range(len(tmpStr)): if tmpStr[i]==' ' and tmpStr[i-1]==' ': print('', end='') else: print(tmpStr[i], end='')

 

035:找第一个只出现一次的字符

描述

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

输入

一个字符串,长度小于100000。

输出

输出第一个仅出现一次的字符,若没有则输出no。

样例输入

abcabd

样例输出

c

通过码: c3a82ff4f04e8bd3720c9ded1dfe9608008542da39745b90f6855afbb6752f1a

s=input() fl=1 for i in range(len(s)): if s.count(s[i])==1: print(s[i]) fl=0 break if fl==1: print('no')

 

 

 036:判断字符串是否为回文

描述

输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。

输入

输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。

输出

如果字符串是回文,输出yes;否则,输出no。

样例输入

abcdedcba

样例输出

yes

 通过码:06546b0aaa0d23293177f440a0e9c1ada5a1a99fd0b961ffff02cf421dc36d82

tmpStr = input() if tmpStr == tmpStr[::-1]: print('yes') else: print('no')

 

037:字符串最大跨距

描述

有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1。 例如,S = "abcd123ab888efghij45ef67kl", S1="ab", S2="ef",其中,S1在S中出现了2次,S2也在S中出现了2次,最大跨距为:18。

输入

三个串:S, S1, S2,其间以逗号间隔(注意,S, S1, S2中均不含逗号和空格);

输出

S1和S2在S最大跨距;若在S中没有满足条件的S1和S2,则输出-1。

 

通过码: d6b9270b63bf981c401a2fbef999171fac0dd3bad3d4c8d0c7632173d968b5e3

tmpStr = input().split(',') if tmpStr[0].count(tmpStr[1])!=0 and tmpStr[0].count(tmpStr[2])!=0 and \ (tmpStr[0].rfind(tmpStr[1]) + len(tmpStr[1]) -1) 31: print('Illegal') return elif mon == 2: if day < 1 or day > 28: print('Illegal') return elif mon in [4, 6, 9, 11]: if day < 1 or day > 30: print('Illegal') return else: print('Illegal') return #输入的年份大于等于2018年的判断过程如下: if year >= 2018: for j in range(2018, year): if (j % 4 == 0) & (j % 100 != 0) or j % 400 == 0: #闰年 years += 366 else: #平年 years += 365 #闰年天数加366天,平年加365天 if ((year % 4) == 0) & ((year % 100) != 0) or ((year % 400) == 0): for i in range(mon - 1): date += list1[i] #闰年月份按list1相加 days = date + day else: for i in range(mon - 1): date += list2[i] #平年月份按list2相加 days = date + day total = days + years ji = total % 7 #参考日期是2018年1月1号是星期一 #由于"ji=0"时,输出的结果是"星期0",因此对"ji"进行了判断,使"ji=0"时输出的结果为"星期7" print(lst_days[ji]) #输入的年份小于2018年的判断过程如下: else: for j in range(year + 1, 2018): if (j % 4 == 0) & (j % 100 != 0) or j % 400 == 0: years += 366 else: years += 365 if ((year % 4) == 0) & ((year % 100) != 0) or ((year % 400) == 0): for i in range(mon - 1, 12): date += list1[i] days = date - day + 1 else: for i in range(mon - 1, 12): date += list2[i] days = date - day + 1 total = days + years ji = total % 7 print(lst_days[(8 - ji)%7]) for i in range(n): year, mon, day = map(int, input().split()) days_of_week(year, mon, day)

 

040:成绩排序

描述

给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

输入

第一行为n (0 < n < 20),表示班里的学生数目; 接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。

输出

把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。

样例输入

4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28

样例输出

Joey 92 Hanmeimei 90 Kitty 80 Tim 28

通过码: 22dfe349d41fba121c8da151525cd8a13381dc3778b94197ec272e20eaeeaa9a

n = int(input()) a = [] for i in range(n): s = input().split() a.append((s[0],int(s[1]))) a.sort(key = lambda x:(-x[1],x[0])) for x in a: print(x[0],x[1])

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3