如何将if仅用于一个数字,当减号(-)仅位于用户输入的数字前面一个时



因此,我试图制作一个程序,用户只需输入一个数字,但对于负数,减号(-(只在数字前面一个。当用户输入错误的输入时,它将重试5次。

所以,我只想要像这个一样的用户输入号码

-1

-12

-123

不像这个

--1

--12

1-

1-

12-

12-

-1-

-12-

1-1

-1-1

还有一些类似的技巧

if语句的解释:

len(nama) > 0

  1. 这是为了避免用户输入空白或只按Enter键

re.match("^[-0-9]*$", nama)

  1. 这是为了让用户只输入一个数字(0-9(和一个减号(-(

nama[1:] != "-"

  1. 这是为了让用户只需在数字前面输入减号(-(

nama[1:-1] != "-"

  1. 这是为了避免用户在第一个减号之后输入减号(-(,直到拿铁

all([len(nama) > 0, re.match("^[-0-9]*$", nama), nama[1:] != "-", nama[1:-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.

这解决了你的例子。

干杯!

最新更新