python 为字符串指定的输入采用整数

python input taking integer while specified for string

我正在练习 python 我正在编写一个小程序,我必须在其中询问他们的姓名,但我试图确保他们没有输入任何数字。因此,当我在 Number 1 中编写代码时,它不使用 int,但它 returns Hello(我尝试过的 int),当我设置 Number 2 之类的代码时,它就可以工作了。所以我在定义提问者函数时做错了,请帮助我理解为什么即使在我有 isalpha()

之后,函数也允许存储整数

。 .

1号

def asker(phrase, name):
  while not name.isalpha():
    print(phrase)
    name = str(input())
  


#Introducing the Game and asking for first player's name
print('Hello! lets play lastLetterWord game')
print("-------------------------------------------")
print('Please enter your name')
x = str(input())
asker("Please enter your name. Only alphabets.", x)
print("-------------------------------------------")
print("Hello " + x)
print("-------------------------------------------")

Terminal result of trying code of Number 1 ..


2号

#Introducing the Game and asking for first player's name
print('Hello! lets play lastLetterWord game')
print("-------------------------------------------")
print('Please enter your name')
x = str(input())
while not x.isalpha():
    print("Please enter your name. Only alphabets.")
    x = str(input())
print("-------------------------------------------")
print("Hello " + x)
print("-------------------------------------------")
print("What is your friend's name?")
print("-------------------------------------------")

Terminal results of trying Number 2

感谢您的帮助。

您的 asker 需要 return 名称而不是将其作为参数(在函数体内分配给 name 不会影响您传递给的参数它来自函数外部):

def asker(phrase):
    name = ""
    while not name.isalpha():
        print(phrase)
        name = input()
    return name

然后你可以做:

x = asker("Please enter your name. Only alphabets.")

现在 x 是用户输入的任何名称。

如果你想有两个不同版本的提示(一个是第一次,一个是如果用户第一次弄错了则带有错误消息),你可以在 asker 中这样做:

def asker(phrase, error_msg):
    name = input(f"{phrase}\n")
    while not name.isalpha():
        name = input(f"{phrase} {error_msg}\n")
    return name

然后像这样称呼它:

x = asker("Please enter your name.", "Only alphabets.")

请注意,即使用户向 input() 输入数字,结果始终是 str,而不是 int 如果你想让它成为一个 int 你需要明确地做 int(x) (如果字符串是非数字的,这将引发 ValueError)。

您没有保存函数的结果。尝试:

 def asker(phrase, name):
    while not name.isalpha():
        print(phrase)
        name = str(input())
    return name


#Introducing the Game and asking for first player's name
print('Hello! lets play lastLetterWord game')
print("-------------------------------------------")
print('Please enter your name')
x = str(input())
x = asker("Please enter your name. Only alphabets.", x)
print("-------------------------------------------")
print("Hello " + x)
print("-------------------------------------------")