我在python上有以下代码:
f = open("configuration.txt", "r")
position = {}
counter = 0
with open("configuration.txt") as fileobj:
for line in fileobj:
for ch in line:
if ch.isdigit():
position[int(ch)] = counter
counter+=1
# print(dict(sorted(position.items())))
position = dict(sorted(position.items()))
diskPositions = list(position.values())
disk = {0:'4',1:'3',2:'2',3:'1'}
pegs = {0:'A',1:'B',2:'C'}
# print(position)
def moveDisks(diskPositions, largestToMove, targetPeg):
for badDisk in range(largestToMove, len(diskPositions)):
currentPeg = diskPositions[badDisk]
if diskPositions[badDisk] != targetPeg:
otherPeg = 3 - targetPeg - currentPeg
moveDisks(diskPositions, badDisk + 1, otherPeg)
print(disk[badDisk], "-", pegs[targetPeg])
diskPositions[badDisk] = targetPeg
moveDisks(diskPositions, badDisk + 1, targetPeg)
break;
moveDisks(diskPositions[::-1], 0, 2)
我需要将此代码转换为ruby。我开始这样做,但是我被卡住了,不知道错误在哪里,或者我在做什么不同。
当我运行它时,我在第30行收到由nil变量引起的以下错误:
/hanoi/final.rb:30:in `-': nil can't be coerced into Integer (TypeError)```
Ruby代码:
f = open("configuration.txt", "r")
position = {}
counter = 0
def is_digit(look_ahead)
look_ahead =~ /[[:digit:]]/
end
File.open('configuration.txt', 'r') do |f|
f.each_line do |l| # iterate on each character
l.each_char do |c|
if is_digit(c)
position[c.to_i] = counter
end
end
counter+=1
end
end
position = position.sort.to_h
disk_positions = position.values
disk = {0 => '4', 1 => '3', 2 => '2', 3 => '1'}
pegs = {0 => 'A', 1 => 'B', 2 => 'C'}
def moveDisks(diskPositions, largestToMove, targetPeg)
for badDisk in (largestToMove..diskPositions.length)
currentPeg = diskPositions[badDisk]
if diskPositions[badDisk] != targetPeg
otherPeg = 3 - targetPeg - currentPeg
moveDisks(diskPositions, badDisk + 1, otherPeg)
print disk[badDisk].to_s + "-", pegs[targetPeg].to_s
diskPositions[badDisk] = targetPeg
moveDisks(diskPositions, badDisk + 1, targetPeg)
break
end
end
end
moveDisks(disk_positions.reverse, 0, 2)
PS:configuration.txt是一个包含以下行的文本文件:
A-1
B-4:2
C-3
答案 0 :(得分:1)
在Python中,内置的 word start stop speaker speaker_2 speaker_1
0 but that's alright 2.72 3.47 2 but that's alright
1 we'll have to 8.43 9.07 1 we'll have to
2 okay sure 9.19 11.01 2 okay sure
3 what? 11.02 12.00 1 what?
4 I agree 12.01 14.00 2 I agree
5 but i disagree 14.01 17.00 2 but i disagree
6 thats fine 17.01 19.00 1 thats fine
7 however you are 19.01 22.00 1 however you are
8 like this 22.01 24.00 1 like this
9 and 24.01 25.00 1 and
函数不包含在内,因此不会返回最后一个数字。 Ruby不使用 function ,它有几个 operators -两点形式range
创建一个范围,包括最后一个数字,三个点号..
,不包括高值。有关更多信息,请参见documentation。
您发布的代码还有一些其他错误,并且不是很惯用,但是您的错误是由使用包含形式引起的,当索引超出范围时,这将导致返回nil值。范围...
与Python函数等效。