【问题标题】:Python3 CastingPython3 铸造
【发布时间】:2018-04-09 19:46:47
【问题描述】:

在此代码中,从 float 转换为 int 不起作用。它总是打印一个float;之后所有整数都以.0 打印。 怎么了?

s = str(input())

if (len(s)/2)%2 == 0:
    print(len(s)/2)
else:
    print(int(round(len(s)/2/2)))

【问题讨论】:

  • 这段代码想做什么?
  • 无复制。如果我输入 1 我得到 0 作为输出,这显然是一个 int 而不是一个 float。
  • 接受一个字符串作为输入并对其长度进行两次测试,在每种情况下我们都会有一个输出,但它必须是一个整数
  • 您只能将结果转换为 else 分支中的 int。如果您的代码进入if 分支,它会输出一个浮点数。
  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。

标签: python python-3.x casting int


【解决方案1】:

您唯一需要在代码中更改的是:-

if (len(s)/2)%2 == 0:
    print(int(len(s)/2))

这应该可以解决问题 您只将 else 块中的结果转换为整数,而不是 if 块中的结果

【讨论】:

    【解决方案2】:

    让我们做一点调试:放入一些简单的测试用例,并打印出大量结果。

    test = ["odd len", "even len"]
    
    for s in test:
        print("test case", s, len(s), len(s)/2)
        if (len(s)/2)%2 == 0:
            print("EVEN", len(s)/2)
        else:
            print("ODD ", int(round(len(s)/2/2)))
    

    输出:

    test case odd len 7 3.5
    ODD  2
    test case even len 8 4.0
    EVEN 4.0
    

    您是否希望“真”分支中的除法提供整数?那是 Python 3 中的 float 分区。我想你想要这些行

    if (len(s)/2)%2 == 0:
        print("EVEN", len(s)//2)
    

    这会给你输出

    test case odd len 7 3.5
    ODD  2
    test case even len 8 4.0
    EVEN 4
    

    你可以通过只在顶部进行一次长度除法来节省一些额外的操作:

    half_len = len(s) // 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 2011-09-17
      • 2011-03-16
      相关资源
      最近更新 更多