Python 当值通过循环输入时,不会拾取字典0键值

Python 当值通过循环输入时,不会拾取字典0键值,python,django,Python,Django,在运行时,它不访问索引[0]处的值,并给出未定义的“avg”错误 我该怎么修呢。 它需要两个十进制值,但只给出一个十进制值。 代码如下: n = int(input()) student_marks = {} for i in range(n): name, *line = input().split() scores = list(map(float, line)) student_marks[name] = score

在运行时,它不访问索引[0]处的值,并给出未定义的“avg”错误 我该怎么修呢。 它需要两个十进制值,但只给出一个十进制值。 代码如下:

    n = int(input())
    student_marks = {}
    for i in range(n):
        name, *line = input().split()
        scores = list(map(float, line))

        student_marks[name] = scores
        print(scores)
        print(student_marks)
    query_name = input()
    if query_name == name:
        print(query_name)
        avg=0
        avg=sum(scores)/3
    print(avg)
输出:

    4
    dd 3 34 2 2
    [3.0, 34.0, 2.0, 2.0]
    {'dd': [3.0, 34.0, 2.0, 2.0]}
    g 3 4 5 6
    [3.0, 4.0, 5.0, 6.0]
    {'dd': [3.0, 34.0, 2.0, 2.0], 'g': [3.0, 4.0, 5.0, 6.0]}
    d 3 4 534 34
    [3.0, 4.0, 534.0, 34.0]
    {'dd': [3.0, 34.0, 2.0, 2.0], 'g': [3.0, 4.0, 5.0, 6.0], 'd': [3.0, 4.0, 534.0, 34.0]}
    e 3 4 4 4
    [3.0, 4.0, 4.0, 4.0]
    {'dd': [3.0, 34.0, 2.0, 2.0], 'g': [3.0, 4.0, 5.0, 6.0], 'd': [3.0, 4.0, 534.0, 34.0], 'e': [3.0, 4.0, 4.0, 4.0]}
    dd
    Traceback (most recent call last):
      File "C:/Users/Priya/Desktop/1.py", line 15, in <module>
        print(avg)
    NameError: name 'avg' is not defined
而不是:

if query_name == name:
也许你想做:

if query_name in student_marks:    # Check if the query name is in the previously provided student details.
因为:

名称,*line=input.split

如果查询名称==名称:

意味着如果您输入查询名称作为提供的最后一名学生的姓名,则只有在以下情况下才会进入查询名称。我99.99%肯定这不是你想要的

在你的输入中,学生是:['dd','g','d','e']。如果您将查询名称提供为“e”,那么只有它会进入If。另外,如果您提供n=0,那么它将抛出一个错误,因为for循环将不会运行,并且name将不存在。我99.99%肯定这不是你想要的

此外:

应该是:

avg=sum(student_marks[query_name])/4   # You have four marks and not three.
因此,改变:

query_name = input()
if query_name == name:
    print(query_name)
    avg=0
    avg=sum(scores)/3
print(avg)
致:

而不是:

if query_name == name:
也许你想做:

if query_name in student_marks:    # Check if the query name is in the previously provided student details.
因为:

名称,*line=input.split

如果查询名称==名称:

意味着如果您输入查询名称作为提供的最后一名学生的姓名,则只有在以下情况下才会进入查询名称。我99.99%肯定这不是你想要的

在你的输入中,学生是:['dd','g','d','e']。如果您将查询名称提供为“e”,那么只有它会进入If。另外,如果您提供n=0,那么它将抛出一个错误,因为for循环将不会运行,并且name将不存在。我99.99%肯定这不是你想要的

此外:

应该是:

avg=sum(student_marks[query_name])/4   # You have four marks and not three.
因此,改变:

query_name = input()
if query_name == name:
    print(query_name)
    avg=0
    avg=sum(scores)/3
print(avg)
致:


将avg=0语句置于if之外,因为if语句不为true时未定义avg

因此,每当if语句为false时,“printavg”语句中未定义“avg”

n = int(input())
student_marks = {}
for i in range(n):
    name, *line = input().split()
    scores = list(map(float, line))

    student_marks[name] = scores
    print(scores)
    print(student_marks)
query_name = input()
avg=0
if query_name == name:
    print(query_name)
    avg=sum(scores)/3
print(avg)
另一种方法是提供一个else语句,并在那里为avg赋值,但我想你不需要它


希望有帮助

将avg=0语句置于if之外,因为if语句不为true时未定义avg

因此,每当if语句为false时,“printavg”语句中未定义“avg”

n = int(input())
student_marks = {}
for i in range(n):
    name, *line = input().split()
    scores = list(map(float, line))

    student_marks[name] = scores
    print(scores)
    print(student_marks)
query_name = input()
avg=0
if query_name == name:
    print(query_name)
    avg=sum(scores)/3
print(avg)
另一种方法是提供一个else语句,并在那里为avg赋值,但我想你不需要它


希望有帮助

从此行修改代码

query_name = input()

if query_name in student_marks:
    scores = student_marks[query_name]
    avg = sum(scores) / len(scores)
    print(avg)
else:
    print(f'Student {query_name} does not exist')
关于python变量作用域的一些解释: 在if else子句或循环内创建的变量可在块外访问

因此,python找不到变量avg的原因是它从未被创建过,这意味着if条件没有得到满足。在编码时,通过简单地放入print语句并打印出值来尝试调试,以查看不满足条件的原因

变量名在for循环的每次迭代中都会被分配一个新值。当控件离开循环时,name的值是用户名='e'为问题中提供的示例输入的最后一个值


您需要检查用户输入的所有名称中是否存在查询名称,这些名称可以从dict学生标记的键中找到。使用in运算符进行简单的成员身份检查即可完成此操作。

从此行修改代码

query_name = input()

if query_name in student_marks:
    scores = student_marks[query_name]
    avg = sum(scores) / len(scores)
    print(avg)
else:
    print(f'Student {query_name} does not exist')
关于python变量作用域的一些解释: 在if else子句或循环内创建的变量可在块外访问

因此,python找不到变量avg的原因是它从未被创建过,这意味着if条件没有得到满足。在编码时,通过简单地放入print语句并打印出值来尝试调试,以查看不满足条件的原因

变量名在for循环的每次迭代中都会被分配一个新值。当控件离开循环时,name的值是用户名='e'为问题中提供的示例输入的最后一个值


您需要检查用户输入的所有名称中是否存在查询名称,这些名称可以从dict学生标记的键中找到。使用in运算符进行简单的成员资格检查即可完成此操作。

此外,分数来自何处?更新了答案。请检查!另外,硬编码的4也可以是lenscores,因为分数是从dict获取的。avg=0是多余的。对!更新!另外,分数来自哪里?更新了答案。请检查!另外,硬编码的4也可以是lenscores,因为分数是从dict获取的。avg=0是多余的。对!更新!