当我键入" no"进入输入我期望它添加1到" x",因此结束循环,但发生的是它忽略它并且不添加1 x。这是代码。
x = 1
password = ""
while x == 1:
# imagine there is some code here which works
ans1 = input("\n\nTest a new password? ")
ans1 = ans1.upper()
print(ans1)
if ans1 == ("Y" or "YES"):
x = x
elif ans1 == ("N" or "NO"):
x = x + 10
print(x)
底部的if / elif语句不起作用。它应该继续要求输入,直到用户说“不”,但这不起作用。
答案 0 :(得分:5)
你应该使用或那样。
if ans1 == ("Y" or "YES"):
可替换为:
if ans1 == "Y" or ans1 == "YES":
或者:
if ans1 in ("Y", "YES"):
该错误来自or
运算符的定义。当您执行“Y”或“是”时,它将返回“Y”,因为A or B
被定义为如果A不为假则返回A.这里,A是“Y”,它不是假值。因此,它将返回A =“Y”。如果您执行if a == ("Y" or "YES"):
,则il将等同于if a == "Y":
。好吧,这有点棘手,但这是python的工作原理。
而且,你的代码很奇怪。退出这样的循环是一个非常糟糕的习惯。通常,我们将一个布尔值“循环”设置为false,当我们想要离开循环时。
以下是我将如何进行循环:
looping = True
password = ""
while looping:
ans1 = input("\n\nTest a new password? ")
if ans1.upper() in ("NO", "N"):
looping = False
您还可以使用具有无限循环(while True:
)的构造。然后,调用指令break
退出循环。
答案 1 :(得分:2)
您也可以使用“break”或“exit”退出循环或程序。通常更好的是使用在意外情况下表现良好的较大条件(x <= 0或ans1不是YES而不是x == 0或ans1是YES或ans1是NO)。
.directive('mupStageButtons', function() {
return {
transclude: true,
template: '<span ng-transclude></span>',
replace: true,
scope: {
property: "=",
action: "="
},
controller: function($scope) {
console.log($scope); //I can see the property of $scope defined in console
console.log($scope.property); //undefined
this.property = $scope.property;
this.changeStage = $scope.action; //anyway this is ok
},
};
})
.directive('mupStageButton', function() {
return {
transclude: true,
templateUrl: '/static/templates/directives/StageButton.html',
require: '^^mupStageButtons',
scope: {
value: "=",
btnClass: "@",
},
link: function(scope, element, attrs, mupStageButtonsCtrl, transclude) {
scope.property = mupStageButtonsCtrl.property;
scope.changeStage = mupStageButtonsCtrl.changeStage;
}
};
})
//html
<mup-stage-buttons property="company.stage" action="setStage">
<mup-stage-button value="0" btn-class="btn-default-grey">
</mup-stage-button>
</mup-stage-buttons>
//controller for that html ^^^
.controller('CompanyDetailController', function($scope, $stateParams, Company){
Company.query ({
id : $stateParams.companyId
}, function (data) {
$scope.company = new Company(data);
});
}
//template for <mup-stage-button>
<label ng-class="property === value ? 'active' : 'btn-on-hover' " class="btn {{btnClass}}" ng-click="changeStage(value)">
<div ng-transclude></div>
</label>
然后你没有未定义的行为,也没有更少的条件要处理:如果不是“是”或“Y”,程序退出。
答案 2 :(得分:1)
嗯,这条线路有问题: ans1 ==(“Y”或“YES”)
与此行不相似:
[Date]
第二个是正确的,第一个叫ans1 == "Y" or ans1 == "YES"
。那不是你想要的。基本上,如果x不为null,则成语null coalescing
返回x,否则返回y
所以基本上你只是检查ans1是否为“Y”(不是“是”)
您可以通过以下方式检查成语列表是否包含您的成语:
x or y
您可以根据需要继续为该列表添加值。