【问题标题】:Not making integer inputs [duplicate]不进行整数输入[重复]
【发布时间】:2015-07-26 18:26:40
【问题描述】:

我希望用户不使用此函数进行整数输入:

x = input("Whats your name?") 
while x == int:
y = input("why is there a number in your name? Please re enter your name")

但这不起作用。知道为什么吗?

【问题讨论】:

  • 这是什么语言?
  • 使用 isinstance(x, int) 而不是 x==int ?
  • 语言是python
  • 这不起作用我仍然输入一个整数并且shell接受它
  • 我知道这可能只是一个学习练习,但对于未来我想推荐您到Falsehoods Programmers Believe About Names - 特别是“15。人名不包含数字。”

标签: python input integer


【解决方案1】:

改进@persian_dev 的回答 -

def check_name(string):
    for char in string :
        try:
            int(char)
            return False
        except:
            continue
    return True

这将遍历字符串,尝试将每个字符转换为 int 并在第一次成功时返回 False。

【讨论】:

    【解决方案2】:

    输入函数会将用户输入的任何内容转换为字符串。

    所以你想改为查看 x 中是否包含任何数字,而不是类型。

    请看这里: check if a string contains a number

    【讨论】:

    • 感谢您的建议
    【解决方案3】:

    这是一个检查功能:

    def isnumeric(string):
        try:
            int(string)
            return True
        except:
        return False
    
    def check_name(string):
        for char in string:
            if isnumeric(char):
                return False
        return True
    

    【讨论】:

    • check_name 为每个字符调用isnumeric 可能会降低性能。我们可以尝试在 check_name 本身中将 char 转换为 int。
    • 谢谢你说得好……
    • 我猜你的意思是string而不是那个for循环中的str
    【解决方案4】:

    如果您只想确保用户输入仅包含字符串,您可以使用isalpha() 来检查输入:

    x = raw_input("Whats your name?") 
    while not x.isalpha():
        x = raw_input("why is there a number in your name? Please re enter your name")
    

    我使用 Python 2,所以我使用 raw_input 而不是 input。如果你使用 Python 3,你可以做相应的调整。

    【讨论】:

      【解决方案5】:

      int 是一种类型。您不是在问 “x 是否包含数字吗?” 甚至 “x 是数字吗?”,您是在问 “x 是数字吗?”(整数,更准确地说)。没有意义。假设输入名称有效,您使用的是 Python 3,在这种情况下,input 的结果始终是一个字符串。即使它只是一串数字。所以isinstance(x, int) 也不起作用。您可以尝试使用 int(...) 进行投射,但如果名称仅在字母之间的某处包含数字,这将无济于事。

      这是一个测试字符串中是否有数字的好方法:

      任何(地图(str.isdigit,x))

      在您的代码中,还将y 更正为x

      x = input("Whats your name? ")
      while any(map(str.isdigit, x)):
          x = input("why is there a number in your name? Please re enter your name ")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 2019-10-17
        • 2015-08-29
        • 2015-06-19
        • 1970-01-01
        相关资源
        最近更新 更多