首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不寻找第二个变量的Tcl前程循环

不寻找第二个变量的Tcl前程循环
EN

Stack Overflow用户
提问于 2022-05-04 19:06:46
回答 1查看 126关注 0票数 0

我相信这一点以前在这里已经问过,但我似乎找不到任何联系,可以帮助我解决我的特殊问题。

我正在使用vmd中的tcl脚本来进行快速分析。

代码语言:javascript
运行
复制
package require pbctools
set wat [atomselect top "segid HETA"]
set pbcbox [pbc get -now]
set Lz [lindex [lindex $pbcbox 0] 2]
set Qwat 0
puts [$wat get charge]
foreach i{$wat get z} j{$wat get charge} {set $Qwat [expr $Qwat + $j * ($i + 0.5 * $Lz) / $Lz]}
#puts $Qwat

当我运行这个脚本时,我得到了错误:

当原子选择0表示它设置得很好时,100.608742是方框Lz的长度,它正在为每个原子找到电荷(每个原子都有一个负电荷)。

但是,它在这个foreach循环上失败了,我希望它同时通过位置和电荷进行迭代。所以,列表1中的第1行和列表2中的第1行,我已经尝试了我能想到的每一个语法迭代,但我似乎无法让这个表达式在foreach循环中工作。

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-04 19:44:45

问题是,您缺少了一些用于Tcl的空白来理解您想要的内容。

因此,foreach i{$wat get z} j{$wat get charge} {}创建了3个变量(假设$wat是"atomselect0"):

  1. "i{atomselect0",的值为"get"
  2. "z}",值为"j{atomselect0"
  3. "get",,值为“

}”

如您所见,没有变量"j“。我猜你想要的可能是:

代码语言:javascript
运行
复制
foreach i [$wat get z] j [$wat get charge] {
    set $Qwat [expr {$Qwat + $j * ($i + 0.5 * $Lz) / $Lz}]
}

(除了一些不寻常的情况外,通常最好用你的表达方式来表达。所以我也做了这个改变,虽然这不是绝对必要的。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72118247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档