python字符串为啥不能用int处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python字符串为啥不能用int处理?相关的知识,希望对你有一定的参考价值。

我是新手 看的《与孩子一起学编程》这本书 书里面讲int() 从一个字符串或浮点数创建一个新的整数
我自己操作的时候 显示
>>> a="73.5"
>>> b=int(a)

Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
b=int(a)
ValueError: invalid literal for int() with base 10: '73.5'
这是为什么?
感激!谢谢您!

我也在看这本书,发现int里一放放字符串就要报错,所以我的方法是借助float
a=float("73.5")
b=int(a)
print b
这样就能从用int从字符串创建整数了
参考技术A 你把a = "73.5"换成a = "73"试一下。。

为啥我不能用字符串为 Dictionary<String, Int> 下标?

【中文标题】为啥我不能用字符串为 Dictionary<String, Int> 下标?【英文标题】:Why can't I subscript a Dictionary<String, Int> with a String?为什么我不能用字符串为 Dictionary<String, Int> 下标? 【发布时间】:2015-07-24 19:47:46 【问题描述】:

我有一本Dictionary&lt;String, Int&gt; 类型的字典,我正在尝试用String 为其下标。我得到错误 Cannot subscript a value of type 'Dictionary&lt;String, Int&gt;' with an index of type 'String'

这是整个方法。我正在运行 Swift 1.2 (Xcode 6.4),但我也尝试过,同样的错误发生在 Swift 2.0 (Xcode 7b4) 中。

这是整个方法:

override func isSatisfied<String, Int>(assignment: Dictionary<String, Int>) -> Bool 
        // if all variables have been assigned, check if it adds up correctly
        if assignment.count == variables.count 
            if let s = assignment["S"], e = assignment["E"], n = assignment["N"], d = assignment["D"], m = assignment["M"], o = assignment["O"], r = assignment["R"], y = assignment["Y"] 
                let send: Int = s * Int(1000) + e * Int(100) + n * Int(10) + d
                let more: Int = m * Int(1000) + o * Int(100) + r * Int(10) + e
                let money: Int = m * 10000 + o * 1000 + n * 100 + e * 10 + y
                if (send + more) == money 
                    return true;
                 else 
                    return false;
                
             else 
                return false
            
        

        // until we have all of the variables assigned, the assignment is valid
        return true
    

问题在于 if let s = assignment["S"]

这里还有源代码存储库: https://github.com/davecom/SwiftCSP

这是具体的文件: https://github.com/davecom/SwiftCSP/blob/master/SwiftCSP/SwiftCSPTests/SendMoreMoneyTests.swift

【问题讨论】:

【参考方案1】:

问题出在这里:

func isSatisfied<String, Int>(assignment: Dictionary<String, Int>) -> Bool 
                 ^===    ^===

您已将此函数定义为通用函数,其中有两个占位符StringInt。这些将掩盖常规类型。删除它们,因为这可能不是您想要的。

当发生这种奇怪的事情时,通常更容易将案例简化为仅显示问题。直到我尝试将您的功能缩减到基本上这样,我才发现出了什么问题:

(p.s. [String:Int]Dictionary&lt;String,Int&gt; 的简写)

【讨论】:

多么愚蠢的疏忽,谢谢您的回复。有没有办法用特定类型覆盖泛型方法? 不要这么认为——如果你考虑一下这意味着什么,你并没有真正重写方法——如果一个函数接受一个泛型参数(比如说,一个完全不受约束的参数),那么你就是在子类的覆盖中说“这只需要字符串”,那么您并没有创建可以调用的函数版本,而不是基类型的函数。如果调用者传入一个整数怎么办? 这很有意义。我需要找到一种新的设计模式。我发现 Swift 的泛型严重阻碍了我之前在 Python 和 Dart 中构建的约束满足框架的移植。也许我只是不够了解它们!

以上是关于python字符串为啥不能用int处理?的主要内容,如果未能解决你的问题,请参考以下文章

为啥print("内容\n"+8)不能运行?

为啥我不能在c中将字符串转换为int

python3在pycharm中为啥导入random模块不能用? TypeError: 'module' object is not callable

2Python语法基础

多维数组的字符依次输出,用pytho实现

python之struct详解