1 Câu hỏi: Làm cách nào để kiểm tra xem năm có hợp lệ do người dùng nhập không?

câu hỏi được tạo ra tại Sun, May 5, 2019 12:00 AM

Tôi muốn có thể kiểm tra năm mà người dùng nhập có hợp lệ không:

  • Chỉ một số nguyên dương
  • Giữa phạm vi 1998-năm hiện tại

Nếu không có năm nào được đề cập, thì hãy sử dụng năm hiện tại

Có cách nào hiệu quả hơn để làm việc này không?

from datetime import datetime

current_year = datetime.now().year

input_year = int(input("Enter Year Here >>"))

if input_year is None:
    input_year = current_year
elif (1998 > input_year) or (input_year > current_year):
    print("Please specify a date between 1998 to {}".format(current_year))
else:
    
1
  1. Điều gì hiệu quả hơn một vòng lặp if đơn giản?
    2019-05-05 13: 12: 54Z
  2. FWIW, ở trạng thái hiện tại của mã input_year is None không bao giờ có thể là True
    2019-05-05 13: 14: 20Z
  3. sử dụng điều kiện xích khi đầu vào là số nguyên if 1998 < input_year < current_year
    2019-05-05 13: 15: 34Z
  4. @ DeveshKumarSingh Tôi đoán tôi phải chạy lại chương trình của mình, trong trường hợp này, để có thể cung cấp lại đầu vào?
    2019-05-05 13: 16: 14Z
  5. 2019-05-05 13: 17: 30Z
1 Câu trả lời                              1                         

Tối ưu hóa khác bạn có thể làm là so sánh chuỗi

int(input("Enter Year Here >>"))

Các đầu ra có thể là

from datetime import datetime

current_year = datetime.now().year
#Take input as string
input_year = input("Enter Year Here >>")

#If input is None, use current year, else convert input to int
if not input_year:
    input_year = current_year
else:
    input_year = int(input_year)

#Use chained comparison
if not 1998 < input_year < current_year:
    print("Please specify a date between 1998 to {}".format(current_year))
else:
    print("You are good")

Để tiếp tục kiểm tra đầu vào, chỉ cần bọc mã trong một vòng lặp thực

Enter Year Here >>
Please specify a date between 1998 to 2019

Enter Year Here >>1990
Please specify a date between 1998 to 2019

Enter Year Here >>2020
Please specify a date between 1998 to 2019

Enter Year Here >>-1000
Please specify a date between 1998 to 2019

Enter Year Here >>2010
You are good

Hơn nữa, bạn đang sử dụng một chuỗi như

while True:

    current_year = datetime.now().year
    #Take input as string
    input_year = input("Enter Year Here >>")

    #If input is None, use current year, else convert input to int
    if not input_year:
        input_year = current_year
    else:
        input_year = int(input_year)

    #Use chained comparison
    if not 1998 < input_year < current_year:
        print("Please specify a date between 1998 to {}".format(current_year))
    else:
        print("You are good")
để phá vỡ vòng lặp của mình và có thể thực hiện kiểm tra chuỗi trống và gán năm đầu vào trong một dòng duy nhất! quit

Nếu bạn muốn kiểm tra xem người dùng nhập chuỗi hay float, bạn có thể thử /ngoại trừ và dựa vào

from datetime import datetime

while True:

    current_year = datetime.now().year
    input_year = input("Enter Year Here! Type quit to stop >>")
    if input_year.lower() == 'quit':
        break
    input_year = int(input_year) if input_year else current_year

    if 1998 < input_year < current_year:
        print('You are good')
    else:
        print("Please specify a date between 1998 to {}".format(current_year))
để kiểm tra xem chuỗi có thể được chuyển thành int hay không! Nếu chuỗi có thể được chọn là int, nó sẽ không ném ValueError, nếu không nó sẽ ValueError

Đầu ra sẽ là

def check_int(s):

    is_int = False
    try:
        int(s)
        is_int = True
    except ValueError:
        pass

    return is_int

print(check_int('a'))
print(check_int('4.0'))
print(check_int(5))

Cuối cùng, kết hợp tất cả chúng, chúng tôi nhận được

False
False
True

Các đầu ra sẽ là

from datetime import datetime

def check_int(s):

    is_int = False
    try:
        int(s)
        is_int = True
    except ValueError:
        pass

    return is_int


while True:

    current_year = datetime.now().year
    input_year = input("Enter Year Here! Type quit to stop >>")
    if input_year.lower() == 'quit':
        break
    if not input_year:
        input_year = current_year
    elif check_int(input_year):
        input_year = int(input_year)
    else:
        print('Provide a number as year')
        continue

    if 1998 < input_year < current_year:
        print('You are good')
    else:
        print("Please specify a date between 1998 to {}".format(current_year))
    
3
2019-05-05 14: 01: 02Z
  1. Cảm ơn! Nhưng có cách nào để tôi có thể kiểm tra xem người dùng chỉ nhập số nguyên hay không, ví dụ: chuỗi hoặc float
    2019-05-05 13: 25: 01Z
  2. Chắc chắn! Thêm phần đó vào cuối câu trả lời @AlyssaAlex
    2019-05-05 13: 27: 58Z
  3. Tuyệt vời! Rất vui được giúp đỡ và cảm ơn vì đã chấp nhận :)
    2019-05-05 13: 35: 42Z
  4. Một câu hỏi cuối cùng, với phần cuối câu trả lời của bạn, về cơ bản nó hiển thị ValueError ngay cả khi tôi không nhập dữ liệu. Tôi muốn có thể bỏ qua điều này và làm cho năm hiện tại làm mặc định. Chúng ta có thể hợp nhất 2 cái này bằng cách nào không?
    2019-05-05 13: 48: 01Z
  5. Vì vậy, nếu người dùng nhập chuỗi hoặc float hoặc thậm chí không có đầu vào, bạn muốn đặt năm hiện tại làm mặc định @AlyssaAlex?
    2019-05-0513: 48: 48Z
Enter Year Here! Type quit to stop >>
Please specify a date between 1998 to 2019
Enter Year Here! Type quit to stop >>hello
Provide a number as year
Enter Year Here! Type quit to stop >>-1234
Please specify a date between 1998 to 2019
Enter Year Here! Type quit to stop >>2000
You are good
Enter Year Here! Type quit to stop >>quit
nguồn đặt đây