Python 我做错了什么,总是突出冒号
您忘记关闭括号:Python 我做错了什么,总是突出冒号,python,Python,您忘记关闭括号: print('''do you wish to access this network''') VAL= int(input("to entre please punch in the pass word: ") if VAL is 2214 **:** print("welcome") else: print("wrong password, please check retry") 如果要比较相等性,我还建议避免使用is运算符 is操作符比较身份(
print('''do you wish to access this network''')
VAL= int(input("to entre please punch in the pass word: ")
if VAL is 2214 **:**
print("welcome")
else:
print("wrong password, please check retry")
如果要比较相等性,我还建议避免使用is
运算符
is
操作符比较身份(即,它是相同的对象,位于相同的内存位置),而==
比较是否相等(即,根据语义,这些对象可以被视为相等)
使用is
测试相等性仅适用于[-5256]
范围内的整数,这是由于实现细节(即缓存这些数字)。其他所有数字都失败了
要详细说明为什么要突出显示冒号而不是
if
本身,请执行以下操作:
请记住,在python中,可以将每个表达式括在括号内,以便在多行中编写,但不能将语句放在括号内。
有一个明确的目标
语句包括循环语句(for
,while
,break
,continue
,else
),if elif else
,try except finally
,with
,赋值name=value
,函数和类的定义等
表达式是其他的一切:a+b
,object.method()
,function\u call()
在您的特定示例中,解析器看到以下行:
print('''do you wish to access this network''')
VAL= int(input("to entre please punch in the pass word: ")) # here!
if VAL is 2214:
这是一个赋值语句。它将右侧表达式的值指定给VAL
。因此,它解析表达式int(input(…)…
,由于此行没有右括号,它将继续在下一行进行解析。但在下一行它会找到:
VAL= int(input("to entre please punch in the pass word: ")
这是一条语句,因为结尾有:
冒号,表达式不能包含语句。这也是为什么如果(a=100)<50:,则不能执行之类的操作,即在条件内赋值
if VAL为2214
本身不是错误,因为还存在一个if
-表达式(实际调用)。
例如,以下是有效的python代码:
if VAL is 2214:
但是,在这种情况下,必须同时指定if
和else
,并且条件表达式中没有冒号。请确保关闭此行的两个括号
VAL = int(input("prompt ")
if n % 2 == 0 else input("different prompt "))
看起来您正在尝试Python3.x,我不知道您为什么要以:结束一行,它应该以:
像这样
VAL= int(input("to entre please punch in the pass word: ")
注意第3行的更改。同时注意第2行缺少的参数
此外,考虑通过字符串进行比较,而不是int转换,因为如果用户输入非数字,它将引发一个异常,将其转换为int。
我将使用以下方法
print('''do you wish to access this network''')
VAL= int(input("to entre please punch in the pass word: "))
if VAL is 2214:
print("welcome")
else:
print("wrong password, please check retry")
最后请注意,上面的代码在python 2.x上运行是危险的,因为input执行输入的字符串而不是捕获字符串值。第一个错误是您忘记关闭)
,正如@Bakuriu指出的:
VAL=input("to enter please punch in the password: ")
if VAL=='2214':
print('welcome')
else:
print("wrong password, please retry")
第二个错误是使用is
比较数字,这是比较数字的错误方法<代码>是
用于识别诸如,a是无的
,或者a是一个
。对于数字,它仅适用于256
下的小数字:
VAL= int(input("to entre please punch in the pass word: "))
但在这个数字之上,它将返回False
:
>>> a = 10
>>> b = 10
>>>
>>> a is b
True
>>>
>>> a = 256
>>> b = 256
>>>
>>> a is b
True
>>>
您应该始终使用
==
来比较数字。您正在尝试编写python吗?为什么它包含ruby on rails标记?这个问题似乎离题了,因为它是关于初学者的一个代码错误,如果对其他人没有帮助的话,可能是这样。太本地化了我希望他使用输入而不是原始输入,并且使用打印作为函数而不是声明它是3.x,在这种情况下,(257是257)
是正确的,因为3.x消除了整数和长整数之间的区别,但是即使这样,==应用于数值比较,除非您特别希望具有整数值的浮点与相同值的整数不匹配1.0不是1
。第三个错误是不使用。(VAL->VAL)哦,还有一个关于is vs==,python3的注意事项是,完成整数比较的时间大约是==的一半,因此如果您有多个嵌套的不可重构代码执行某种线性搜索来查找值,is比==更好。关于PEP8,需要注意的一点是,它主要用于核心python发行版本身,以及作为扩展设计的第三方框架(twisted、django等),因此,尽管我不同意所有新项目都应该严格遵循PEP8,但如果您想让代码进入标准库,需要这样做。此外,如果您要偏离PEP8,您可能有充分的理由这样做。@Perkins257 is 257在任何python版本中都能工作,因为编译器会这样做。如果在解释器的两行中输入a=257
和b=257
,则a是b
是False
,而使用255
返回True
。另外,is
不能用于加速线性搜索,这是不正确的。只有在确定序列中包含的确切对象具有引用时,才能使用它。在99%的情况下,这是不正确的。此外,除非您以后需要再次使用VAL
,否则只需使用if-input('txt')='2214':
,如果您希望它忽略空白,请将其设置为input('txt').strip()
>>> a = 257
>>> b = 257
>>>
>>> a is b
False
>>>