我已修复错字,但在尝试使程序正确引发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
答案 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"
.
.
.
看起来似乎没有什么不同,但是现在您可以传入int
或str
,只要可以成功将其转换为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
。