我对Python编程很陌生。我总是编写int
输入,如下例所示,以确保用户输入int
。这是我在我的代码中的一个具体示例,我确信我可以缩短它,从而学习未来的项目。
这确保通过创建一个在输入三位数时断开的循环来输入三位数字。
while 1 == 1:
print("Input a 3 digit number")
#The try statement ensures an INTEGER is entered by the user
try:
x = int(input())
if 100 <= x < 1000:
break
else:
print()
except ValueError:
print()
答案 0 :(得分:5)
您可以这样做:
while True:
x = input("Input a 3 digit number: ")
if x.isdigit() and 100 <= int(x) <= 999:
break
isdigit()
检查字符串是否仅由数字组成(不适用于浮点数)。由于Python使用短路来使用运算符and
来计算布尔表达式,所以除非第一个(100 <= int(x) <= 999
)为真,否则不会计算第二个表达式x.isdigit()
,因此这不会抛出提供字符串时出错。如果isdigit()
的计算结果为False,则无论如何都不会计算第二个表达式。
另一种选择如下:
condition = True
while condition:
x = input("Input a 3 digit number: ")
condition = not (x.isdigit() and 100 <= int(x) <= 999)
答案 1 :(得分:3)
如果你想分别处理两个不同的失败(不是int而不是3位数),你可以这样做:
while True:
try:
x = int(input('enter a 3 digit number'))
assert(100 <= x <= 999)
except ValueError: print('not an int')
except AssertionError: print('int not 3 digit')
else: break
它不是世界更短,但它仍然非常易读,并为用户提供额外的信息。此外,如果您的目的是使其可重复使用,则应将其设为一个函数(只需将break
替换为return x
并将def funcname():
添加到开头(不要忘记缩进))
答案 2 :(得分:2)
这是一个有趣的选择,可以避免需要休息或例外:
scoring=['recall', 'precision']
print("-----------------------------------------LR-------------------------
--------")
clf = LogisticRegression()
scores = cross_validate(clf, traindata, trainlabel, cv=3, scoring=scoring,
return_train_score=False)
print(scores)
print("precision")
print(scores.keys()[2])
print(np.mean(scores.values()[2]))
print("Sensitivity")
print(scores.keys()[3])
print(np.mean(scores.values()[3]))