我正在尝试掌握python中的any()和all()函数。
我正在尝试编写代码来检查用户是否输入了任何非数字值。
def my_sum(*args):
#args=[]
if any([(type(arg)==int or type(arg)==float) for arg in args]):
total=0
for num in args:
total+=(num)
return total
else:
return "Please enter numerals only"
print (my_sum(1,45,87,36))
print (my_sum(1,25,45,75.85,"Newton","Pythagoras"))
我希望第一次调用将打印出所有数字的总和,而第二次调用函数以打印出消息。但是我收到了不支持的操作数类型的类型错误消息。
答案 0 :(得分:0)
any()
将返回True。这两个测试用例都是这种情况-您将永远不会执行else
部分。
all()
仅在所有元素均为True时才返回True。因此,在这种情况下,这就是您想要的-使用all()
,而不是any()
。
请注意,如PEP8中所建议,要测试类型,最好使用isinstance()
,而不是type()
,例如isinstance(x, (int, float))
最后,使用try / except来捕获错误并处理错误,而不是进行类型检查,被认为是更pythonic。
答案 1 :(得分:0)
您应该将条件更改为以下之一:
<script type="text/javascript">
document.getElementsClassName('switch').addEventListener("change",function(){
if (this.checked) window.open("PDFS/CSS.pdf");
});
</script>
<style>
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {display:none;}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2196F3;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
</style>
<h2>Toggle Switch</h2>
<label class="switch">
<input type="checkbox"/>
<div class="slider"></div>
</label>
或
# This is checking if all input in list are floats or ints
if all([(type(arg)==int or type(arg)==float) for arg in args]):
答案 2 :(得分:0)
如果您坚持使用 any(),并且不更改 if 语句的顺序,那么最好检查一下 str 类型,并使用不:
def my_sum(*args):
# if none of the args are str, then sum them up
if not any([type(arg)==str for arg in args]):
total=0
for num in args:
total+=num
return total
# otherwise return the message
else:
return "Please enter numerals only"
print (my_sum(1,45,87,36))
print (my_sum(1,25,45,75.85,"Newton","Pythagoras"))
但是,摆脱 not 而不是更改 if else 语句的顺序似乎更合乎逻辑:
def my_sum(*args):
# if any of the args are string, then return the message
if any([type(arg)==str for arg in args]):
return "Please enter numerals only"
# otherwise sum them up
else:
total = 0
for num in args:
total += num
return total
print (my_sum(1,45,87,36))
print (my_sum(1,25,45,75.85,"Newton","Pythagoras"))