Python 当值通过循环输入时,不会拾取字典0键值
在运行时,它不访问索引[0]处的值,并给出未定义的“avg”错误 我该怎么修呢。 它需要两个十进制值,但只给出一个十进制值。 代码如下: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
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是多余的。对!更新!