为什么当我使用下面的程序时,我的引号中的“y”与y定义的值相反,后者将是用户输入的字符串
def main():
x = (input("Give me a boolean: ").lower() == 'true')
y = str(input("Give me a string: "))
z = int(input("Give me a number: "))
if x == True:
print (y)
print ("\"",y,"\"",sep="")
else:
print (z*2)
main()
答案 0 :(得分:3)
我们来谈谈布尔,因为这实际上是问题所在。
x = bool(input("Give me a boolean: "))
# x is ALWAYS True unless the user enters an empty string
这里的问题是所有非空字符串都是布尔True
。 "Hello"
为True
,"TRUE"
为True
,"False"
为True
。评估为False
的唯一字符串是""
。因此,当您在此处提示输入,然后稍后进行测试时,除非用户只是绕过测试,否则您将始终通过该测试。让我们继续......
y = str(input("Give me a string: ")) # good here, though no need to call str()
z = int(input("Give me a number: ")) # uh oh...
如果我为z输入ajkldfj
,则会抛出ValueError
。处理此问题的常用方法是try/except
,例如:
z = input("Give me a number: ")
try:
int(z)
except ValueError as e:
# handle it
接下来......
if x == True or true:
这与TONS的人有同样的问题。 if foo == 1 or 2
并不代表您的想法,它实际上意味着if (foo == 1 is True) or (2 is True)
。要执行您要执行的操作,您应该执行if x == "True" or x == "true"
,但更好的是if x.lower() == "true"
,更好的是if x.casefold() == 'true'
,但BEST YET只是if x
。请记住,当你提示它时,你已经把它变成了bool
。您可以通过放弃bool()
来电,然后在此处测试来改变它,在这种情况下,我建议if x.lower() == 'true'
或if x.casefold() == 'true'
。你会经常看到的其他代码是if x in ('true','True')
,但是因为我们可以用小写来消除所有歧义:DO IT!
现在打印声明:
print (y) # prints the value in y
print ('"y"') # prints "y"
如果这不是您想要做的,您可以使用字符串格式或任何其他任何东西来正确格式化它。让我知道你想做什么,我们可以进一步讨论!
答案 1 :(得分:0)
您必须使用以下行才能打印y
print(y)
及以下y带括号
print( "(" + y + ")")
您的代码中的 Warning:
,如果X == False,那么python会给您以下错误
NameError: name 'true' is not defined
答案 2 :(得分:0)
您可以在打印时使用format
。
print("({0})".format(y))
其中0
引用传递给格式的第一个参数,1
引用第二个,依此类推。此外,您正在执行x == True or true
,or true
错误,应该删除。另外bool("True") == bool("False") == True
,因为Python中的字符串(长度> 0)是True
,你可能想要像
x = str(input("True/False? "))
y = str(input("Input string: "))
z = int(input("Number: "))
if x.lower() == "true":
print("({0})".format(y))
修改:示例会话
>>> def main():
x = str(input("True/False? "))
y = str(input("Input string: "))
z = int(input("Number: "))
if x.lower() == "true":
print("({0})".format(y))
>>> main()
True/False? false
Input string: dog
Number: 2
>>> main()
True/False? true
Input string: dog
Number: 2
(dog)