如何在不重新导入的情况下限制输入



hi所有人都试图询问用户名,只能使用字母或数字或_。如果提供了其他东西,我需要再问一次。到目前为止,这就是我所拥有的,但当我尝试跑步时,它只是继续前进,而不是完成。所以在第一个问题之后,如果我输入用户名,比如";千斤顶";它应该只打印用户名:jack,但它只是不断地问代码中的第二个问题"请输入用户名(只有字母和数字(我该如何解决这个问题?"?

Username = input ("What is your username?")
while Username != "^[A-Za-z0-9]*$":

Username = input('Please enter a username(only letters and numbers)')

print("Username: ", Username)

可以有两种方法。

  1. 循环字符串并检查每个字符是否属于字母或数字范围。尽管不建议这样做,因为这会耗费时间和内存
  2. 使用CCD_ 1。这是一个简单的短,比以前更好

代码:

Username = input ("What is your username?")
while not Username.replace('_', '').isalnum(): #Edit: Removed _ as an invalid character

Username = input('Please enter a username(only letters and numbers)')

print("Username: ", Username)

对https://stackoverflow.com/a/71506891/18248018答案是用这句话代替while not Username.replace('_', '').isalnum():让其他一切都一样。

这将允许用户名仍然包含下划线,如果这是您的意图的话。

.replace(old, new)返回一个新字符串(保持原始字符串不变(,其中子字符串old的所有实例都被字符串new替换。这意味着上面修改后的代码行在一个相当于去掉下划线的Username输入的字符串上调用.isalnum(),并检查是否所有剩余字符都是字母数字。

否则,.isalnum()将拒绝包含下划线的输入。

最新更新