【问题标题】:Making a dictionary that contains (i,i*i) where i is from 1 to n制作一个包含 (i,i*i) 的字典,其中 i 是从 1 到 n
【发布时间】:2019-02-12 03:30:32
【问题描述】:

输入格式:

将数字 n 放在一行中。

输出格式:

在一行中打印字典 d。

期望的行为,对于输入 8,字典:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

我尝试了什么:

n=int(input())
for i in range(1,n+1):
    a=i*i
    print("{",i,": ",a,"}",sep="")

它给了我什么,对于输入 6:

{1: 1}
{2: 4}
{3: 9}
{4: 16}
{5: 25}
{6: 36}

【问题讨论】:

  • 您不是在创建字典,而只是在打印字符串
  • 如果你想在同一行打印所有这些条目,你必须使用字符串连接。

标签: python-3.x dictionary for-loop numbers range


【解决方案1】:

您可以在单个语句中创建字典:

d = dict((i,i*i) for i in range(1,n+1))

n=8 你得到

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

【讨论】:

    【解决方案2】:

    您可以使用dictionary comprehension 创建字典:

    n = int(input())
    d = {i: i * i for i in range(1, n + 1)}
    print(d)
    

    10 你得到

    {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
    

    【讨论】:

      【解决方案3】:

      如果你想打印字典,为什么不做一个简单的而不是复杂的。

      n=int(input())
      d = {}
      for i in range(1,n+1):
          a=i*i
          d[i] = a
      print(d)
      

      你会得到预期的O/P:

      {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
      

      【讨论】:

        【解决方案4】:

        单线解决方案

        print(''.join(['{', ', '.join([': '.join((str(i), str(i * i),)) for i in range(1, n + 1)]), '}']))
        

        说明

        str 模块中有一个名为join 的内置函数。有了它,您可以使用指定的分隔符连接字符串列表。

        下面的例子

        ','.join(['Hello', 'World'])
        

        将返回连接字符串

        'Hello, world'
        

        您可以看到join 很好地处理了边距。

        但请注意,join 采用单个参数,即字符串列表。您不能为其提供整数列表;否则join 会报错:

        TypeError: sequence item 0: expected str instance, int found
        

        因此您应该强制将range 生成的整数转换为str 的字符串。

        参考

        【讨论】:

          猜你喜欢
          • 2015-05-24
          • 1970-01-01
          • 2022-01-13
          • 2019-03-15
          • 2015-08-17
          • 1970-01-01
          • 2020-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多