使用功能故障

时间:2019-01-23 16:28:42

标签: python function

我已修复错字,但在尝试使程序正确引发ValueError时仍然遇到问题。这是我的代码;

def grade(mark):
    if not isinstance(mark, int):
        raise TypeError ("Invalid input, please enter an integer")
    if mark != range (0, 101):
        raise ValueError ("Invalid input, Please enter an integer between 0 
and 101")
    if mark >= 60:
        return "D"
    elif mark >= 50:
        return "M"
    elif mark >= 40:
        return "P"
    else:
        return "F"
print (grade(mark=int(input("Please enter the students mark: "))))

这是控制台返回的内容;

J:\Python\python.exe K:/Jetbrains/.PyCharmCE/config/scratches/scratch_21.py
Please enter the students mark: 10
Traceback (most recent call last):
  File "K:/Jetbrains/.PyCharmCE/config/scratches/scratch_21.py", line 19, in 
<module>
print (grade(mark=int(input("Please enter the students mark: "))))
File "K:/Jetbrains/.PyCharmCE/config/scratches/scratch_21.py", line 10, in 
grade
raise ValueError ("Invalid input, Please enter an integer between 0 and 
101")
ValueError: Invalid input, Please enter an integer between 0 and 101

Process finished with exit code 1

4 个答案:

答案 0 :(得分:1)

您需要交换int和输入。然后,您需要使用打印命令将返回的输出打印到控制台

def grade(mark):
    if not isinstance(mark, int):
        raise ValueError ("Invalid input, please enter an integer")
    if mark >= 60:
        return "D"
    elif mark >= 50:
        return "M"
    elif mark >= 40:
        return "P"
    else:
        return "F"

print(grade(mark=int(input("Please enter the students mark: "))))

答案 1 :(得分:1)

让我们把这一行分开:

grade(mark=input(int("Please enter the student's mark: ")))

我们可以将其重写为:

query_text = "Please enter the student's mark: "
number = int(query_text)
input_from_user = input(number)
grade(mark=input_from_user)

看看第二和第三行,这可能不是您想要的。为什么要在收到用户输入之前,将query_text转换为int?您希望看到的是:

query_text = "Please enter the student's mark: "
input_from_user = input(query_text)
number = int(input_from_user)
grade(mark=number)

将其重写为一行:

grade(mark=int(input("Please enter the student's mark: ")))

一条建议:

您正在尝试将用户输入转换为int函数,然后将其传递给grade()函数。这不一定是个坏主意,但是您检查int的操作是在grade()函数内部进行的。结果,您的意图就是不会在grade()函数中捕获错误的用户输入。

grade()函数中编写支票的更好方法是:

def grade(mark):
    try:
        mark = int(mark)
    except ValueError:
        raise ValueError("Invalid input, please enter an integer.")
    if mark >= 60:
        return "D"
    .
    .
    .

看起来似乎没有什么不同,但是现在您可以传入intstr,只要可以成功将其转换为int。 (这就是您想要的,对吧?)

现在可以将评分电话简化为:

grade(mark=input("Please enter the student's mark: "))

并且对int的调用中不需要grade()强制转换。

答案 2 :(得分:0)

您需要用>>> import numpy as np >>> np.float32(0)//1 -0.0 切换input并添加一个int

新行:

print

答案 3 :(得分:0)

只需添加,就不需要在定义函数时指定grade(mark=int(input())),也可以将第一个给定参数设置为mark