#打字练习成绩评定
'''
假设origin为原始内容,userInput为用户练习时输入的内容,
要求用户输入的长度不能大于原始内容的长度,如果对应位置的
字符一致认为正确,否则判定输入错误。最后成绩为:
正确的字符数量/原始字符串长度,按百分制输出,要求保留2位小数
'''
#先设置一段字符串
def judge():
origin="Python的创始人为Guido van Rossum" #练习的内容
print("用户练习的内容:")
print(origin)
while True: #进行长度的检测,如果长度不符合标准那么就重新输入
try:
useInput = input("请输入:")
assert len(useInput)==len(origin) # assert断言:可以理解为“这里一定是成立的”,如果表达式不成立(False),则抛出异常。
except:
print("输入的长度有误,请再次输入")
else:
count=0 #对正确的进行计数
for i in range(len(origin)): #对每一个字符进行比较
if useInput[i]==origin[i]:
count=count+1
else:
continue
result=round(count/len(origin)*100,2)
print(result)
print("正确率:{}%".format(result))
break #跳出while这循环,如果不跳出从新到line14进行程序
judge()
输出:
用户练习的内容:
Python的创始人为Guido van Rossum
请输入:Python的3始人为G3ido van Rossum
92.59
正确率:92.59%
这一段是我自己思考的结果
接下来放上参考答案看看有哪些地方可以学习
def Rate(origin,userInput):
if not (isinstance(origin,str) and isinstance(userInput,str)): #两个必须为字符串
return print("The two parameters must be strings")
if len(origin)!=len(userInput): #判断长度
return print("Sorry.I suppose the second parameter string is not true")
#精确匹配字符个数
count=0#计数
for oc ,uc in zip(origin,userInput):#内置函数zip()
if oc==uc:
count=count+1
result=count / len(origin)
return print("{}%".format(round(result*100,2)))#函数round()
origin="Python的创始人为Guido van Rossum"
userInput=input("请输入:")
Rate(origin,userInput)
这里几个内置函数需要注意
1.isinstance()
isinstance() 函数来判断一个对象是否是一个已知的类型
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True
True
2.zip()
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> zipped = zip(a,b)
>>> zipped
<zip object at 0x02B01B12> #返回的是一个对象
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)] #使用list()函数转换为列表
>>> zipped = zip(a,b)
>>> list(zip(*zipped)) #解压也使用list进行转换
[(1, 2, 3), (4, 5, 6)] #(1,2,3)是一个元组
3.round()
round() 方法返回浮点数x的四舍五入值。
round(x,n)
x -- 数字表达式。
n -- 表示从小数点位数,其中 x 需要四舍五入,默认值为 0。
>>>round(70.23456)
70
>>>round(56.659,1)
56.7
>>>round(80.264, 2)
80.26