缩短代码

时间:2018-05-17 14:33:26

标签: python python-3.x

我对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()

3 个答案:

答案 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]))