我和MSc的学生今年一直在做python代码,但没有任何经验。我想知道是否有人可以帮我解决这个问题,我已完成了一些部分。
Q6)
作业6 如果等级大于或等于以下百分比,则根据%(范围从0到100)进行分类: - 70第一; 60 Second Upper; 50秒下; 45第三; 40通过; 0失败。 从上面的数据创建一个字典,并使用它作为程序的一部分来评分标记,来自两个来源: - 1.在开发过程中,从硬编码的标记列表中顺序分级标记= [-1,0,1,49,60,71,100,101], 2.开发后,包括代码以反复请求测试标记,直到输入q或Q终止。 标记将被授予简明编码,该编码应该在最少使用比较测试的情况下有效运行。 保留功能以从最终代码中的上述两个来源获取输入,即在开发后不删除项目“1”。
到目前为止我的解决方案看起来像这样:
hardcoded_lst = [-1,0,1,49,60,71,100,101]
grade_input=int(input('What grade?')
input_lst= []
while grade_input !=
input_lst.append(grade_input)
grade_input=int(input('What grade?')
print(input_lst)
我需要为值创建一个字典,但目前还没有。
我很感激任何帮助,基本代码,因为我不是很先进。
由于
答案 0 :(得分:1)
创建字典不是那么难,它就像创建列表一样简单,你已经完成了
列表
mylist = []
#for dictionary
mydictionary = {}
将项目添加到词典
mylist.append(value)
mydictionary["fail"] = 50
迭代列表
for item in mylist:
print item
在字典中迭代
for key,value in mydictionary.iteritem():
print key,value
我希望这可以帮助你,在iteritem拼写等方面可能存在错误,你可以谷歌它,但这就是它如何正常完成
这里有更新的东西
mydictionary = {}
marks = 0
mydictionary[(0,45)] = "Fail"
mydictionary[(46,59)] = "Lower"
mydictionary[(60,69)] = "Second Lower"
mydictionary[(70,100)] = "First"
marks = 63
for key,value in mydictionary.iteritems():
if marks >= key[0] and marks <= key[1]:
print value
给定的代码可以通过这种方式实现,但
答案 1 :(得分:0)
以下程序应该按照您的要求进行。有几行用#
字符注释掉。如果您希望查看debug
函数调用中引用的变量的值,则可以取消注释这些行。请花些时间研究代码,以便了解它的工作原理和原因。
import pprint
import sys
RANGE = range(0, 101)
GRADE = {70: 'First', 60: 'Second Upper',
50: 'Second Lower', 45: 'Third',
40: 'Pass', 0: 'Fail'}
MARKS = -1, 0, 1, 49, 60, 71, 100, 101
def main():
"""Grade hardcoded marks and grade marks entered by the user."""
# debug('MARKS')
grade_all(MARKS)
grade_all(get_marks())
print('Goodbye!')
def grade_all(marks):
"""Take an iterable of marks and grade each one individually."""
for mark in marks:
# debug('mark')
if mark in RANGE:
print(mark, 'gets a grade of', grade_one(mark))
else:
print(mark, 'is not a valid mark')
def grade_one(mark):
"""Find the correct grade for a mark while checking for errors."""
# debug('RANGE')
if mark in RANGE:
for score, grade in sorted(GRADE.items(), reverse=True):
if mark >= score:
return grade
raise ValueError(mark)
def get_marks():
"""Create a generator yielding marks until the user is finished."""
while True:
try:
text = input('Mark: ')
except EOFError:
sys.exit()
else:
# debug('text')
if text.upper() == 'Q':
break
try:
mark = round(float(text))
except ValueError:
print('Please enter a mark')
else:
# debug('mark')
if mark in RANGE:
yield mark
else:
print('Marks must be in', RANGE)
def debug(name):
"""Take the name of a variable and report its current status."""
frame, (head, *tail) = sys._getframe(1), name.split('.')
for scope, space in ('local', frame.f_locals), ('global', frame.f_globals):
if head in space:
value = space[head]
break
else:
raise NameError('name {!r} is not defined'.format(head))
for attr in tail:
value = getattr(value, attr)
print('{} {} {} = {}'.format(
scope, type(value).__name__, name, pprint.pformat(value)), flush=True)
if __name__ == '__main__':
main()
答案 2 :(得分:-1)
您需要使用成绩值作为键创建字典,并根据输入使用输入填充键,或将其拒绝为无效。也许是这样的:
if input>=70:
grade[first]=input
elif input>=60 and input<70:
grade[secondupper]=input
elif input<0 or input>100:
print 'invalid grade!'
如果每个等级有多个值,请考虑使用列表将值读入,然后在填充时将相应的dictionarty值设置为列表。