使用struct
和一个应该打印出struct元素的函数,我编写了这个简单的程序:
package main
import "fmt"
type Salutation struct {
name string
greeting string
}
func Greet(salutation Salutation) {
fmt.Println(salutation.name)
fmt.Println(salutation.greeting)
}
func main() {
var s = Salutation
s.name = "Alex"
s.greeting = "Hi"
Greet(s)
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了错误go:16: type Salutation is not an expression
.这里出了什么问题?
有趣的是,当我改变定义时s
,var s = Salutation {"Alex", "Hi"}
它的工作正常.但它们基本上是用于定义同一实体的不同语法方式.这就是我不理解错误来源的原因.
我在Windows 7上运行Python3.4.我正在尝试使用graphviz的Python接口.这是我打算运行的脚本:
from graphviz import Digraph
import pydotplus
dot = Digraph(comment='The Round Table')
dot.node('A', 'King Arthur')
dot.node('B', 'Sir Bedevere the Wise')
dot.node('L', 'Sir Lancelot the Brave')
dot.edges(['AB', 'AL'])
dot.edge('B', 'L', constraint='false')
print(dot.source)
dot.render('test-output/round-table.gv', view=True)
Run Code Online (Sandbox Code Playgroud)
我在运行时收到以下错误:
RuntimeError: failed to execute ['dot', '-Tpdf', '-O', 'test-output/round-table.gv'], make sure the Graphviz executables are on your systems' path
Run Code Online (Sandbox Code Playgroud)
现在我确信我已正确安装了正确的依赖项.我首先尝试设置正确的环境变量.graphviz可执行文件位于C:\ Program Files(x86)\ Graphviz2.37\bin,所以我转到了Environment Variables部分.那里有两个部分:用户变量和系统变量.在系统变量下我单击路径然后单击Edit
并添加; C:\ Program Files(x86)\ Graphviz2.37\bin到字符串的末尾并保存.这并没有清除错误.
然后,按照这里给出的答案我卸载了pydot(实际上我在这里使用pydotplus)并重新安装它,但仍然没有成功.
我一直在努力解决这个问题,而整个PATH变量只是令人困惑和令人沮丧.
我有一个以DOT文件形式保存的传感器.我可以使用gvedit看到图形的图形表示,但是如果我想将DOT文件转换为可执行的传感器,那么我可以测试传感器并查看它接受的字符串以及它不接受的字符串.
在我在Openfst,Graphviz及其Python扩展中看到的大多数工具中,DOT文件仅用于创建图形表示,但如果我想解析文件以获得交互式程序,我可以测试字符串换能器?
是否有任何库可以完成任务,或者我应该从头开始编写它?
正如我所说,DOT文件与我设计的模拟英语形态的换能器有关.这是一个巨大的文件,但只是为了让您了解它是什么样的,我提供了一个示例.假设我想创建一个能够模拟英语关于名词和多个方面行为的传感器.我的词典只包含三个单词(书,男孩,女孩).在这种情况下,我的传感器看起来像这样:
这是从这个DOT文件直接构造的:
digraph A {
rankdir = LR;
node [shape=circle,style=filled] 0
node [shape=circle,style=filled] 1
node [shape=circle,style=filled] 2
node [shape=circle,style=filled] 3
node [shape=circle,style=filled] 4
node [shape=circle,style=filled] 5
node [shape=circle,style=filled] 6
node [shape=circle,style=filled] 7
node [shape=circle,style=filled] 8
node [shape=circle,style=filled] 9
node [shape=doublecircle,style=filled] 10
0 -> 4 [label="g "];
0 -> 1 [label="b "];
1 -> 2 [label="o "];
2 -> 7 [label="y "];
2 -> 3 [label="o "];
3 -> 7 [label="k "];
4 -> 5 [label="i "];
5 …
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为的函数generator
,它返回一个在某些预先指定的范围内随机选择的值的4元组.让我们说元组是这样的形式(age, sex, location, marital_status)
:
age is in range(5, 85)
sex is a member of the set {"m", "f"}
location is a member of the set of all the cities in California
marital_status is a member of {"married", "single", "separated"}
Run Code Online (Sandbox Code Playgroud)
另一方面,假设我已经定义了20个不同的函数,其定义如下:
def p1 (age, sex, location, marital_status)
def p2 (age, sex, location, marital_status)
.
.
Run Code Online (Sandbox Code Playgroud)
p1
应该在哪里接收具有以下形式的值的参数:
`age` must be in the range 20 to 45
`sex` must be male
`location` could be any city in Southern …
Run Code Online (Sandbox Code Playgroud) python function parameter-passing pattern-matching python-3.x
我觉得Go中有不同的整数类型让人感到困惑.鉴于许多其他主要编程语言中没有这些区别,定义这些不同类别的必要性是什么?
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
Run Code Online (Sandbox Code Playgroud) 在Python中使用Regex时,很容易使用括号来表示一系列字符a-z
,但这似乎不适用于其他语言,如阿拉伯语:
import re
pattern = '[?-?]'
p = re.compile(pattern)
Run Code Online (Sandbox Code Playgroud)
这会导致以...结尾的长错误报告
raise error("bad character range")
sre_constants.error: bad character range
Run Code Online (Sandbox Code Playgroud)
怎么能修好?
我正在阅读七周七语中的Clojure部分.它说:
You can merge two sets, like this:
user=> (clojure.set/union #{:skywalker} #{:vader})
#{:skywalker :vader}
Or compute the difference:
(clojure.set/difference #{1 2 3} #{2})
Run Code Online (Sandbox Code Playgroud)
这不适用于我的版本(Clojure 1.7.0
和Java版本"1.8.0_51"
):
user=> (clojure.set/difference #{1 2 3} #{4})
ClassNotFoundException clojure.set java.net.URLClassLoader.findClass (:-1)
user=> (clojure.set/union #{:skywalker} #{:vader})
ClassNotFoundException clojure.set java.net.URLClassLoader.findClass (:-1)
Run Code Online (Sandbox Code Playgroud)
在Clojuredocs中,在示例中使用了较短的函数名称,但这也不起作用:
user=> (difference #{1 2} #{2 3})
CompilerException java.lang.RuntimeException: Unable to resolve symbol: difference in this context, compiling:(NO_SOURCE_PATH:14:1)
Run Code Online (Sandbox Code Playgroud)
为什么我收到这些错误,我该如何解决?
假设我有一个很长的这种类型列表:
text = [ ['a', 'b'], ['a', 'd'], ['w', 'a'], ['a', 'b'], ... ]
Run Code Online (Sandbox Code Playgroud)
鉴于第一个元素,我想构建一个显示第二个元素计数的字典.例如,在上面的特定示例中,我希望有这样的事情:
{'a': {'b':2, 'd':1},
'w': {'a':1}
}
Run Code Online (Sandbox Code Playgroud)
这是我试图解决它的方法失败了.我构建了一个独特的第一个元素列表.我们打电话words
然后:
dic = {}
for word in words:
inner_dic = {}
for pair in text:
if pair[0] == word:
num = text.count(pair)
inner_dic[pair[1]] = num
dic[pair[0]] = inner_dic
Run Code Online (Sandbox Code Playgroud)
我得到一个明显错误的结果.代码的一个问题是,它覆盖了对.我不知道如何解决这个问题.
我想写一个识别回文的简单函数:
>>> def palindrome(s):
return s == s[::-1]
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它区分大小写并修复我可以做的:
>>> def palindrome(s):
return s.lower() == s[::-1].lower()
>>> palindrome('Aba')
True
Run Code Online (Sandbox Code Playgroud)
但我觉得它不是很优雅.我尝试使用lambda表达式小写输入,但我做错了,不知道如何解决它:
>>> def palindrome(lambda s : s.lower()):
return s == s[::-1]
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 假设我有一个共享密钥的字典列表,color
并且object
:
inpt = [{'object':'square', 'color':'red', 'size':'big'},
{'object':'square', 'color':'red', 'coord':(0,0)},
{'object':'square', 'color':'red'},
{'object':'triangle', 'color':'blue', 'adj':'beautiful'},
{'object':'triangle', 'color':'blue', 'attr':'none'}]
Run Code Online (Sandbox Code Playgroud)
在这里我只关心object
和color
.我想计算一下红色方块和蓝色三角形的数量.这意味着找到次数{'object':'square', 'color':'red'}
和{'object':'triangle', 'color':'blue'}
发生次数.换句话说,我需要在像这样的字典列表中找到键值对中的共性数.
最终结果可能是这样的:
{('square', 'red'): 3, ('triangle', 'blue'):2}
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以做到这一点?