簡體   English   中英

如何修改我的代碼以提供 dict 數據類型的輸入?

[英]How can I modify my code to give the input in dict datatype?

我的目標:有 n 個學生的記錄。每條記錄包含學生的姓名和他們在數學、物理、化學方面的百分比。分數可以是浮動值。您需要將記錄保存在字典數據類型中。學生的姓名是key.Marks 存儲在列表中是值。用戶輸入學生的姓名。輸出該學生獲得的平均百分比分數。 這是我的代碼:

n = int(input("Enter total number of students:"))

student_marks = {}

for x in range(n):
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores
student_name = input("Enter name of the student whose average you want:")

print("{0:.2f}".format(round(sum(student_marks[student_name]) / len(student_marks[student_name]), 2)))

我實際上得到了這個輸出:

Enter total number of students:3
Krishna 67 68 69
Arjun 70 98 63
Malika 52 56 60
Enter name of the student whose average you want:Malika
56.00

但我希望我的示例輸入是包含標記為列表的 dict 形式,即,

Sample input: {'Krishna':[67,68,69],
               'Arjun':[70,98,63],
               'Malika':[52,56,60]}

如何修改我的代碼以提供這樣的輸入? 不使用導入 asl? 請幫忙。提前致謝。

您可以導入模塊 ast 並評估您的輸入,如下所示

import ast
input_dictionary = ast.literal_eval( input() )

嘿,這就是你要找的嗎?

不太明白這個問題,但我希望這會有所幫助......


在效率方面可能不是最好的,但它可以完成工作,如果有沒有成績的學生就行不通,但你可以用額外的邏輯來解決它




student_marks = {}

test = {'Krishna':[67,68,69],
               'Arjun':[70,98,63],
               'Malika':[52,56,60]}

    
_avg_scores = [sum(test[x])/(len((test[x]))) for x in test.keys()]


average_scores ={ list(test.keys())[i] : avg_scores[i] for i in range(len(_avg_scores)) }

student_name = input("Enter name of the student whose average you want:")


print(average_scores[student_name])

如果我理解正確,您希望將 dict 作為輸入,因此您所要做的就是將 dict 的 str 表示轉換為 dict,為此您可以使用內置的ast.literal_eval

import ast

n = input("Input as dict")
catalog = ast.literal_eval(n) # catalog object of <class 'dict'>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM