在python中出现这种情况为啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中出现这种情况为啥相关的知识,希望对你有一定的参考价值。

python为什么会出现这种错误?
这是 Python 的浮点数精度问题,因为 Python 在存储浮点数的方法是存储二进制的科学计数法。

8 字节 64 位存储空间分配了 52 位来存储浮点数的有效数字,11 位存储指数,1 位存储正负号。
简单来说,因为小数点后面理论上可以有无限位数,所以不可能在有限字节中精确存储,所以用的是类似科学计数法的非精确存储。我们用分数来打比方,0.333334 可以用 1/3 来表示,但是 1/3 不等于 0.333334。所以在 Python 中就出现了这个问题,不光是 Python,其他语言也有类似的问题。
如何解决这种问题

接下来我们看看如何解决这个问题。

对于精确度要求不高的场景,可以计算后使用 round 函数近似。

对于确定小数位数的场景,例如金额 1.01,固定两位小数,则可以乘以 100 以后用整型保存。

对于精确度要求高的场景,Python 有 decimal 模块处理。
参考技术A 没问题啊
Type "help", "copyright", "credits" or "license" for more information.
>>> x=input("x= ")
x= 32
>>> y=input("y= ")
y= 42
>>> print x*y
1344
>>>本回答被提问者采纳
参考技术B

我的没问题啊

追问

你这是python吗?怎么感觉像C语言啊

追答

你见过有这样的c语言吗

参考技术C 这篇文章旨为刚接触python不久的朋友,提供一点帮助,请在检查代码没有主要问题时再看是否存在以下问题。

对于接触python不久的朋友来说,写完代码运行时,如果代码中有错误,解释器会提示错误信息,按照提示信息,一般很快可以找出错误,进行修改。但也有一些时候错误提示的信息不是那么明确,代码检查了几遍仍找不出问题,就比较头疼了。今天我们来说一个常见的invalid syntax,在写代码的过程中,哪些小细节错误容易导致invalid syntax报错。更多的原因,后续逐渐补充......
1. 符号使用不正确
例如:只写了半个括号,使用了中文符号等
像下面的代码中,76行少了一个右括号。

67 ……
68 else:
69 header = "HTTP/1.1 200 OK\r\n"
70 header += "\r\n"
71
72 body = "hahahaha"
73
74 response = header + body
75
76 new_socket.send(response.encode("utf-8")
77
78 new_socket.close()
79
80 def run_forever(self):
81 while True:
82 new_socket, client_addr = self.tcp_server_socket.accept()
83
84 p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
85 p.start()
86
87 new_socket.close()
88 ……
运行代码,则会报错:

File "w01.py", line 78
new_socket.close()
^
SyntaxError: invalid syntax
其实,78行并没有错误,这时我们就在78行附近寻找,看是否有成对的符号(如括号)未成对使用的情况。在76行补全右括号后,代码运行正常。
有些解释器会有自动补全符号的功能。有些则没有,这时对于新手朋友要特别注意,在写成对的符号时(例如括号、引号等)一定要一次把一对符号写完,再在符号中填写内容,避免因这种情况出现bug,后续检查花费大量时间。

2. 代码缩进问题
python是一种严格依赖缩进的语言,如果缩进不正确或缩进格式不统一,一般错误信息会明确告诉你,但有时也会出现invalid syntax报错。
所谓缩进不正确,python的缩进是四个空格或一个TAB,如果缩进三个空格,一定报错
所谓缩进格式,即不能空格和TAB混用。如果不清楚是否存在混用,可以使用sublime统一调整即可。
参考技术D 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言、C++、Java 是强类型语言的代表。

下面我们以 C++ 为例来演示强类型语言中变量的使用:
int n = 10; //int表示整数类型
n = 100;
n = "http://c.biancheng.net/socket/"; //错误:不能将字符串赋值给整数类型
url = "http://c.biancheng.net/java/"; //错误:没有指明类型的变量是没有定义的,不能使用。

和强类型语言相对应的是弱类型语言,Python、javascriptphp 等脚本语言一般都是弱类型的。

弱类型语言有两个特点:
变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。

注意,弱类型并不等于没有类型!弱类型是说在书写代码时不用刻意关注类型,但是在编程语言的内部仍然是有类型的。我们可以使用 type() 内置函数类检测某个变量或者表达式的类型,例如:
>>> num = 10
>>> type(num)
<class 'int'>
>>> num = 15.8
>>> type(num)
<class 'float'>
>>> num = 20 + 15j
>>> type(num)
<class 'complex'>
>>> type(3*15.6)
<class 'float'>

iOS 为啥在这种情况下 backBarButtonItem 为零

【中文标题】iOS 为啥在这种情况下 backBarButtonItem 为零【英文标题】:iOS why backBarButtonItem is nil in this scenarioiOS 为什么在这种情况下 backBarButtonItem 为零 【发布时间】:2016-05-27 12:01:05 【问题描述】:

我有一个嵌入在导航控制器中的视图控制器,其中有一个按钮,显示另一个视图控制器,如下所示:

在第二个视图控制器中,self.navigationItem.backBarButtonItem 的值为 nil,请问为什么?

虽然我在运行应用程序时可以看到返回按钮,如下所示:

更新

我读到视图控制器中的后退按钮是前一个视图控制器的导航项的责任,更准确地说,它是前一个视图控制器中导航项的责任。

所以我尝试在第一个视图控制器中执行此操作:

 self.navigationItem.backBarButtonItem!.title = "Wdd"

但我遇到了异常,因为 backBarButtonItem 在第一个视图控制器中也是 nil。

更新2

请大家看这里

https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html#//apple_ref/doc/uid/TP40011313-CH2-SW3

有这句话

与当前视图控制器关联的导航项为导航栏的中心和右侧位置提供内容。前一个视图控制器的导航项提供左侧位置的内容

【问题讨论】:

您在哪种方法中检查 self.navigationItem.backBarButtonItem 的值? 签入 viewDidAppear @PradipVanparia 在视图中确实加载了方法 @PradipVanparia 请阅读我的更新,我读到 previous 视图控制器是返回栏按钮的负责人。所以不需要在第二个视图控制器中做任何事情,设置前一个视图控制器的后退栏的值就足够了,然后导航控制器会自动将该值作为第二个视图控制器的后退按钮.对吗? @PradipVanparia 或者你的意思是即使在第一个视图控制器中,我也应该在视图中设置后退按钮的值确实出现了方法? 【参考方案1】:

我自己找到了解决方案。

在 firstVC 中我这样做是因为确实加载了:

backButton.title = "ddddd"
        self.navigationItem.backBarButtonItem = backButton

它可以工作

我在这张图片之后得到了答案:

【讨论】:

【参考方案2】:

您可以从 Storyboard 在您的第二个控制器中添加导航项并设置返回按钮标题。这样self.navigationItem.backBarButtonItem.title 就不会为零了。

【讨论】:

这样,我将失去返回按钮的默认行为,我需要为此编写代码。 我在我的代码中尝试过,它可以工作,它会回到第一个控制器。

以上是关于在python中出现这种情况为啥的主要内容,如果未能解决你的问题,请参考以下文章

Bash 脚本错误:“函数:未找到”。为啥会出现这种情况?

为啥与多个 Popen 子进程一起使用时会出现通信死锁?

Qt执行Cmake时Cmake出现这种情况时为啥

在登录SqlServer2012时为啥会出现这样的情况

我用wireshark抓包,啥都没开,为啥出现这种情况

急急急!!为啥下载了iis 安装完后出现这种情况