Very basic Python question (strings, formats and escapes)

后端 未结 10 2079
别那么骄傲
别那么骄傲 2021-02-06 10:59

I am starting to learn Python with an online guide, and I just did an exercise that required me to write this script:

from sys import argv

script, filename = ar         


        
相关标签:
10条回答
  • 2021-02-06 11:57

    How about this? I used a for loop.

    from sys import argv
    
    script, filename = argv
    
    print("We're going to erase %r." % filename)
    print("If you don't want that, hit CTRL-C (^C).")
    print("If you want that, hit RETURN.")
    
    input("?")
    
    print("Opening the file...")
    target = open(filename, 'w')
    
    print("Truncating the file. Goodbye!")
    target.truncate()
    
    print("Now I am going to ask you for three lines.")
    
    line1 = input("line 1: ")
    line2 = input("line 2: ")
    line3 = input("line 3: ")
    
    print("I'm going to write these to the file.")
    
    for a in (line1, line2, line3):
        target.write("\n")
    
    target.close()
    
    0 讨论(0)
  • 2021-02-06 11:59

    The guide is suggesting creating a single string and writing it out rather than callingwrite() six time which seems like good advice.

    You've got three options.

    You could concatentate the strings together like this:

    line1 + "\n" + line2 + "\n" + line3 + "\n"
    

    or like this:

    "\n".join(line1,line2,line3) + "\n"
    

    You could use old string formatting to do it:

    "%s\n%s\n%s\n" % (line1,line2,line3)
    

    Finally, you could use the newer string formatting used in Python 3 and also available from Python 2.6:

    "{0}\n{1}\n{2}\n".format(line1,line2,line3)
    

    I'd recommend using the last method because it's the most powerful when you get the hang of it, which will give you:

    target.write("{0}\n{1}\n{2}\n".format(line1,line2,line3))
    
    0 讨论(0)
  • 2021-02-06 11:59

    I think they want you to use string concatenation:

    target.write(line1 + "\n" + line2 + "\n" + line3 + "\n")
    

    Much less readable, but you have only one target.write() command

    0 讨论(0)
  • 2021-02-06 12:02

    bad

    Original code is repetitive, and copy-pasting code is dangerous ( Why is "copy and paste" of code dangerous? ):

    print "Now I'm going to ask you for three lines."
    
    line1 = raw_input("line 1: ")
    line2 = raw_input("line 2: ")
    line3 = raw_input("line 3: ")
    
    print "I'm going to write these to the file."
    
    target.write(line1)
    target.write("\n")
    target.write(line2)
    target.write("\n")
    target.write(line3)
    target.write("\n")
    

    good

    Much shorter, can change it to 4+ lines just by changing one character:

    print "Now I'm going to ask you for three lines."
    
    lines = [raw_input("line {i}: ".format(i=i)) for i in range(1,4)]
    
    print "I'm going to write these to the file."
    
    for line in lines:
        target.write(line+'\n')
    
    0 讨论(0)
提交回复
热议问题