我需要创建一个程序,用户可以在其中进行不同的测试。因为我不想复制粘贴我的代码全部为每个测试,我试图为此目的设置一个类 - 但我有这个类的问题。 错误消息=未定义的变量或' display_test'
中的方法我已将预定义的som测试作为.txt文件
我想根据用户的回答选择班级中的文件 - 可能吗?
班级代码:
class Test
@correct_answers = 0
def display_question( question, options, answer )
puts question
options.each_with_index { |option, idx| puts "#{ idx + 1 }: #{ option
}" }
print 'Answer: '
reply = gets.to_i
if answer == reply
puts 'Correct!'
@correct_answers += 1
puts "#{@correct_answers}"
else
puts 'Wrong. The correct answer was: ' + answer.to_s
end
end
def display_test()
f = File.new(userinput, 'r')
while ! (f.eof?) #logikken til at splitte
line = f.gets()
question = line.split("|")
question[1] = question[1].split(";")
display_question question[0], question[1], question[2].to_i
end
end
display_test
puts "________________________________________________________"
puts "Total score:"
puts "You've got" + " #{@correct_answers}" + " correct answers!"
在我使用(" geografitest.txt")而不是File.new中的用户名之前,它看起来像这样:
f = File.new('geografitest.txt','r')
但现在我想让用户决定要采取什么样的测试。
我对红宝石很新,所以请耐心等待。 我试图这样做,显然不起作用。
puts "Which test do you want to take?"
select = 0
while (select != 3)
puts "Press 1 to take Geografi test."
puts "Press 2 to take Math test."
puts "Press 3 to take Religion test."
puts "Press 3 to exit"
select = gets.chomp.to_i
if (select == 1)
gets.chomp = userinput
userinput =`geografitest.txt`
echo $userinput
end
if (select == 2)
gets.chomp = userinput
userinput =`matematiktest.txt`
echo $userinput
end
if (select == 3)
gets.chomp = userinput
userinput =`religionstest.txt`
echo $userinput
end
if (select > 4)
puts "Not a correct selection"
elsif (select == 4)
puts "Goodbye"
end
end
abort
所以现在我的问题; 如何让用户选择要进行的测试?我可以创建一个变量而不是我试过的文本文件,但是以不同的方式?或者有更聪明的方法吗?
我的班级错在哪,我该如何解决?我知道它不是制作它的方法,但我简直无法理解如何使它正确。
请帮助一个菜鸟出去。 干杯!
答案 0 :(得分:0)
您可以根据用户输入和对象构造函数将文件作为依赖项传递给您。像这样的东西
class Test
attr_reader :correct_answers_count
def initialize(file)
@file = file
@correct_answers_count = 0
end
#other code goes here
end
loop do
case user_input = gets.chomp
when '1'
file_name = 'some_file1'
when '2'
file_name = 'some_file1'
when '3'
break
else
puts 'wrong variant'
end
test = Test.new(File.new(file_name, 'r'))
test.display
end