“ SyntaxError:无效语法”为什么?

时间:2019-01-26 11:15:35

标签: python python-3.x

我需要这个例子:test(a1,c3,b2 ...)的随机名称和随机类型。

two.write("%s\n" "%s" % (names.get_first_name(), random.choice(random_list))

SyntaxError:语法无效

为什么?

import random
import names
random_list=["a1","a2","a3","b1","b2","b3","c1","c2","c3"]

with open("one.txt","w+") as one, \
     open("two.txt","w+") as two, \
     open("three.txt","w+") as three:
      for i in range(0,3):
          one.write("%s\n" "%s" %  
(names.get_first_name(),random.choice(random_list))
          two.write("%s\n" "%s" % (names.get_first_name(), 
random.choice(random_list))
          three.write("%s\n" "%s" % (names.get_first_name(), 
random.choice(random_list))

1 个答案:

答案 0 :(得分:1)

您忘记在每个写调用的末尾添加一个额外的括号。你有:

one.write("%s\n" "%s" %  (names.get_first_name(),random.choice(random_list))

但是在该行的末尾,括号中的一个来自choice,另一个括号来自%之后的参数。 write通话需要额外的括号。

one.write("%s\n" "%s" % (names.get_first_name(),random.choice(random_list)))

编辑:

您说:

  

但结果是Harry b2Rosemary b3Edward b1

     

我需要(harry-b2)(迷迭香-b3)(爱德华-b1)

在写调用中,您放入了"%s\n" "%s"。在第一个%s之后,有一个换行符,因此名称会在一行上,但是换行符将紧随其后,然后是列表中的随机数。您需要按以下方式调整模板:"%s-%s\n"甚至是"(%s-%s)\n",如果您需要将结果放在方括号中。

所以最终的写法应该是: one.write("%s-%s\n" % (names.get_first_name(),random.choice(random_list)))

one.write("(%s-%s)\n" % (names.get_first_name(),random.choice(random_list)))

当然,您需要将此应用于所有这些。 干杯!