
本文共 2762 字,大约阅读时间需要 9 分钟。
Powered by:AB_IN 局外人
题目描述
勇士菜哭武获得了一把新的武器,武器有特殊的伤害计算方式。武器的伤害计算方式由若干个部分的和组成,用+号连接。每一部分可以是一个整数a,或者是一个公式ndx。其中a表示固定伤害a点;ndx表示掷n个x面骰子,伤害是所有骰子点数的和。总伤害是每一部分伤害的和。
比如2d6+1d70+3,表示掷两个6面骰子和一个70面骰子(不一定实际存在70面骰子,可以理解成1到70当中随机选择一个整数),再加上固定伤害3点。
他正准备挑选一把好武器,需要计算新武器的伤害期望值,想让你帮他计算一下。
输入描述
输入一个字符串,表示伤害计算公式。字符串长度不超过5000,对于每一个部分,1≤a, n, x≤1000。a,n,x都是整数。
输出描述
输出一个数,表示伤害的期望值。如果不是整数,小数点后位数保留最少,即最终结果只有可能是整数或者小数点后是.5的形式,如果不是整数,那么保留一位小数。
这里提供两个写法
while True: try: s=input().split("+") ans=0 for i in s: if i.find('d')!=-1:#这个就是判断i这个字符串里有没有d,有就返回1,没有返回-1 n,x=i.split("d")#n,x根据d分开 ans+=(int)(n)*(int(x)+1)*0.5#求期望值,应该是从1一直加到x,再除以x,可以化简 else: ans+=int(i) if ans%1==0:#判断是否为整数 print(int(ans)) else: print(int(ans)+0.5)#根据题目要求加0.5 except: break
while True: try: s=input().split("+") ans=0 for i in range(len(s)): if 'd' in s[i]:#从前往后判断是否‘d’在字符串里 n,x=s[i].split("d") ans+=(int)(n)*(int(x)+1)*0.5 else: ans+=int(s[i]) if ans*10%10==0: print(int(ans)) else: print("%.1f"%ans)#print(f'{ans:.1f}') except: break
while True: try: n=int(input()) if n==0: break tmp=input().split() lst=["".join(sorted(list(i))) for i in tmp] for i in lst: if lst.count(i)>1: while lst.count(i)>0: tmp.remove(tmp[lst.index(i)]);lst.remove(i) tmp.sort() if len(tmp)==0: print("None",end="") else: for i in tmp: print(i,end=" ") print() except: break
记几个点:
1.sorted(list(i))
这儿,返回排好的i的列表。如果用list(i).sort()
没有返回值。
2. lst=['1','2','1','1']
"".join(lst)
将列表的字符连接到一起成字符串'1211'
。如果用str(lst)
的话,返回的是
"['1','2','1','1']"
。
(如果lst=[1,2,1,1]
时,还得加上一句lst=[str(i) for i in lst]
或lst=list(map(str,lst))
,一个循环,一个映射。)
3.下标问题。
<1>如果一个循环要用到它的下标。
for k,i in enumerate(lst):
此时k为下标,i为数字。
<2>如果单纯就是想要下标。
k=lst.index(i)
此时k为下标,i为数字。
4.删相同数时
<1>可以写个while
循环,remove
直到它的count=0
。
<2>大名鼎鼎的filter
比如:要在列表里把1删了 lst=[1,2,1,1]
lst=[1,2,1,1]tmp=list(filter(lambda x: x!=1,lst))print(tmp)#[2]
所以!!!
更短的代码!
while True: try: n=int(input()) if n==0: break tmp=input().split() lst=["".join(sorted(list(i))) for i in tmp] tmp1=list(filter(lambda x: lst.count("".join(sorted(list(x))))==1 ,tmp)) tmp1.sort() if len(tmp1)==0: print("None",end="") else: for i in tmp1: print(i,end=" ") print() except: break
即从tmp
里出来个原数 ,筛选出 lst
里 (经过sort
过的) (在lst
里只有一次出现的)数。
完结。
发表评论
最新留言
关于作者
