因此,我试图制作一个程序,用户只需输入一个数字,但对于负数,减号(-(只在数字前面一个。当用户输入错误的输入时,它将重试5次。
所以,我只想要像这个一样的用户输入号码
-1
-12
-123
不像这个
--1
--12
1-
1-
12-
12-
-1-
-12-
1-1
-1-1
还有一些类似的技巧
if语句的解释:
len(nama) > 0
- 这是为了避免用户输入空白或只按Enter键
re.match("^[-0-9]*$", nama)
- 这是为了让用户只输入一个数字(0-9(和一个减号(-(
nama[1:] != "-"
- 这是为了让用户只需在数字前面输入减号(-(
nama[1:-1] != "-"
- 这是为了避免用户在第一个减号之后输入减号(-(,直到拿铁
all([len(nama) > 0, re.match("^[-0-9]*$", nama), nama[1:] != "-", nama[1:-1] != "-"])
- 如果所有语句都正确,它将转到下一个。但我不确定使用AND或or,或者代码看起来不太好
我试过了,但为什么在数字前面和后面输入了多个减号(-(后,仍然打印";Benar";。这不是我想要的。
这是我的第一个简单代码:
for retry_nama in range(5):
nama = input("masukkan nama: ")
if all([len(nama) > 0, re.match("^[-0-9]*$", nama), nama[1:] != "-", nama[1:-1] != "-"]):
print("Benar")
input("press ENTER to exit")
break
print("salah, try again.")
else:
print("You keep making invalid name, exiting now.")
sys.exit(1)```
这样简单的检查不需要正则表达式:
def is_int(s):
s = str(s)
if s[0] in ('-', '+'):
return s[1:].isdigit()
return s.isdigit()
for retry_nama in range(5):
nama = input("masukkan nama: ")
if is_int(nama):
print("Benar")
input("press ENTER to exit")
break
print("salah, try again.")
else:
print("You keep making invalid name, exiting now.")
另一种方法是将数字强制转换为int
,然后看看会发生什么:
sample_input = [
"-1",
"-12",
"-123",
"--1",
"--12",
"1-",
"1--",
"12-",
"12--",
"-1-",
"-12-",
"1-1",
"-1-1",
]
for inp in sample_input:
try:
number = int(inp)
print(f"Input is a valid int: {number}")
except ValueError:
print(f"{inp} is not a valid int.")
打印:
Input is a valid int: -1
Input is a valid int: -12
Input is a valid int: -123
--1 is not a valid int.
--12 is not a valid int.
1- is not a valid int.
1-- is not a valid int.
12- is not a valid int.
12-- is not a valid int.
-1- is not a valid int.
-12- is not a valid int.
1-1 is not a valid int.
-1-1 is not a valid int.
这解决了你的例子。
干杯!