【问题标题】:PYTHON3: How to print out user input string and print it out separated by a comma?PYTHON3:如何打印出用户输入字符串并用逗号分隔打印出来?
【发布时间】:2018-06-20 05:40:19
【问题描述】:

我当前的代码是:

def my_input(): 
    my_string = input("Important ions are: ")
    for i in my_string:
        print(my_string, sep=",")

my_input()

所以我正在尝试编写一个程序,提示用户“重要元素是:”,并希望输入:

Na K Ca Mg Mn(都在一行,用一个空格隔开):

然后,我希望我的代码打印出以下内容:

Important ions are: Na, K, Ca, Mg and Mn

相反,使用我当前的代码,我得到以下输出:

Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn
Na K Ca Mg Mn

我对为什么/如何多次打印输出感到困惑。我想我明白为什么它没有用逗号分隔,是因为它将输入视为 1 个字符串吗? 而且我想为了打印出我想要的输出,我必须这样做

print("Important ions are" + my_string)

但我知道这是不正确的,然后我怎么能打印出输入,用逗号分隔并在其间添加一个“和”作为上面显示的所需输出??

【问题讨论】:

    标签: python python-3.x function input printing


    【解决方案1】:

    首先,您的猜测是正确的,您必须在打印输出时添加字符串 "Important ions are"

    此外,您在 for 循环中使用了 'my_string'(所有离子输入),这就是您多次打印“Na K Ca Mg Mn”的原因。

    你需要的是这样的

    def my_input(): 
        my_string = input("Important ions are: ")
        ions = my_string.split(' ')
        print("Important ions are: ", end='')
        for j, i in enumerate(ions):
            if j == 0:
                print(i, end='')
            if j == (len(ions) - 1):
                print(' and ' + i)
            else:
                print(', ' + i, end='')
    
    my_input()
    

    输出:

    # >>> my_input()
    # Important ions are: Na K Ca Mg Mn
    # Important ions are: Na, Na, K, Ca, Mg and Mn
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      import re
      def my_input(): 
          my_string = input("Important ions are: ").split()   # storing the input as elements of a list
          w = " ".join(my_string)                                     # joining all the elements in the list  
          print("Important ions are: ", re.sub(" ",", ",w[0:-2]) +'and '+ my_string[-1])  # appending the last element after inserting ', ' and 'and'
      
      my_input()
      

      这应该会按照您想要的方式为您提供输出。 您的代码重复打印输入的原因是因为这行:

       print(my_string, sep=",")
      

      它只是打印整个输入的次数与输入中的元素一样多。 此外,sep="," 不会在循环中工作。

      【讨论】:

        【解决方案3】:

        这是一个替代版本

        def my_input(): 
            my_string = input("Important ions are: ")
            ions = my_string.split() # Split input by whitespace characters
            print('Important ions are:', ', '.join(ions))
        
        my_input()
        
        • ions 存储了输入离子的列表。
        • ', '.join(ions) 返回一串离子,用逗号隔开,后跟一个空格。
        • print 用于打印前缀 Important ions are: 和连接的字符串。请注意,print 使用空格来分隔给定的参数。

        要在最后两项之间显示and,最后一项应单独打印。这是更新的版本。

        def my_input(): 
            my_string = input("Important ions are: ")
            ions = my_string.split() # Split input by whitespace characters
            print('Important ions are:', ', '.join(ions[:-1]), 'and', ions[-1]))
        
        my_input()
        
        • ions[:-1]:将@​​987654330@ 列表切分到倒数第二项。
        • ions[-1]:最后一项。

        slicing on Python tutorial

        但是,如果只输入一个离子或不输入离子,代码会分别产生奇怪的结果或错误。要解决此问题,应评估 ions 的长度:

        def my_input(): 
            my_string = input("Important ions are: ")
            ions = my_string.split() # Split input by whitespace characters
            if len(ions) > 1:
                print('Important ions are:', ', '.join(ions[:-1]), 'and', ions[-1]))
            elif lrn(ions) == 1:
                print('Important ion is:', ions[0])
            else:
                print('No ions are important')
        my_input()
        

        【讨论】:

        • 我认为这是一个值得去的地方。
        • 是的,但是如何在最后一个之前添加“and”?
        猜你喜欢
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 2015-12-20
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多