关于Python:Python – TypeError:/:’int’和’NoneType’不支持的操作数类型

Python - TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

问题

我正在制定一个能告诉你成绩的计划。我已经得到了所有的用户输入,现在我需要做一些计算。当调用计算加权平均值时,我的问题就出现了。它将参数作为整数(至少我认为它是这样的:我要求它向print(x, y, z)输入,它会打印两次,一次是x、y、z的正确输入,另一次是x的正确输入,但它会打印y和z作为无),但它拒绝执行我要求它执行的数学操作。函数是否应该能够接受参数并执行这个简单的操作:( x + y ) * z?所以出于某种原因Y和Z变为"无",这就是我需要解决的问题!

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def main():
    tests = get_initial_input("tests")
    assignments = get_initial_input("assignments")
    exercises = get_initial_input("exercises")
    labs = get_initial_input("labs")
    finals = get_initial_input("finals")
    testsp = get_percents(tests ,"tests")
    assignmentsp = get_percents(assignments,"assignments")
    exercisesp = get_percents(exercises,"exercises")
    labsp = get_percents(labs,"labs")
    finalsp = get_percents(finals,"finals")
    testst = get_totals(tests,"tests")
    assignmentst = get_totals(assignments,"assignments")
    exercisest = get_totals(exercises,"exercises")
    labst = get_totals(labs,"labs")
    finalst = get_totals(finals,"finals")
    testss = get_scores(tests,"tests")
    assignmentss = get_scores(assignments,"assignments")
    exercisess = get_scores(exercises,"exercises")
    labss = get_scores(labs,"labs")
    finalss = get_scores(finals,"finals")
    testsz = calculate_weighted_average(testss, testst, testsp)
    assignmentsz = calculate_weighted_average(assignmentss, assignmentst, assignmentsp)
    exercisesz = calculate_weighted_average(exercisess, exercisest, exercisesp)
    labsz = calculate_weighted_average(labss, labst, labsp)
    finalsz = calculate_weighted_average(finalss, finalst, finalsp)
def get_initial_input(x):
    val = int(input("How many"+ x +" were there?   "))
    return val

def get_percents(x, string):
    if x > 0:
            xp = int(input("What percentage are"+ string +" weighted?      "))
            return xp

def get_totals(x, string):
    if x > 0:
            xt = int(input("How many total points available in the"+ string +" category?     "))
            return xt

def get_scores(x, string):
    total = 0
    for y in range(x):
            xs = int(input("Scores for"+ string +" ?:    "))
            total = total + xs
    return total
def calculate_weighted_average(x, y, z):
    print(x, y, z)
    this = ( x / y ) * z
    return this

main()

追溯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
How many tests were there?    2
How many assignments were there?    0
How many exercises were there?    0
How many labs were there?    0
How many finals were there?    0
What percentage are tests weighted?       20
How many total points available in the tests category?      20
Scores for tests ?:     20
Scores for tests ?:     20
40 20 20
0 None None
Traceback (most recent call last):
  File"assignment7.py", line 61, in <module>
    main()
  File"assignment7.py", line 23, in main
    assignmentsz = calculate_weighted_average(assignmentss, assignmentst, assignmentsp)
  File"assignment7.py", line 49, in calculate_weighted_average
    this = ( x / y ) * z
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

提前谢谢你


您需要调整您的get_totalsget_percents,以返回int,即使它们的条件失败。同样,如果其中一个条件不满足,则返回None

例如:

1
2
3
4
5
def get_percents(x, string):
    xp = 0
    if x > 0:
        xp = int(input("What percentage are"+ string +" weighted?      "))
    return xp

也:

1
2
3
4
5
def get_totals(x, string):
    xt = 0
    if x > 0:
        xt = int(input("How many total points available in the"+ string +" category?     "))
    return xt


功能

1
2
3
4
def get_totals(x, string):
  if x > 0:
        xt = int(input("How many total points available in the"+ string +" category?     "))
        return xt

x小于或等于零时返回None。该值随后在calculate_weighted_average中传播到数值表达式,并将其破坏。修复此函数和其他函数以始终返回数字或引发异常。