У меня проблема с функцией повтора в R - PullRequest
0 голосов
/ 28 апреля 2020

checknames <- function(){
  gamers <- c("Rebeca","Luis","Paco")
  games <- c("3","2","7")
  scores <- c(100,110,50)
  table <- data.frame(gamers,games,scores)
  r=0
  p=0
  repeat{
    print("Name Player 1: ")
    name1=scan(,what="character",1)
    for(i in 1:length(gamers)){
      if(name1==gamers[i]){
        r=readline(prompt = "This player is already in the file. Would you like to change the name? \n 1. Yes \n 2. No \n Select an option: ")
      }
    }
    if(r==2){
      break
    }
    if(r==0){
      gamers=c(gamers,name1)
      name1 <- data.frame(gamers=name1,games="1",scores="100")
      table <- rbind(table,name1)
      break
    }
  }
  table
  repeat{
    print("Name Player 2: ")
    name2=scan(,what="character",1)
    for(i in 1:length(gamers)){
      if(name2==gamers[i]){
        print("This player is already in the file. Would you like to change the name?")
        r=scan(,what="character",1)
      }
    }
    if(p=="No"){
      break
    }
    if(p==0){
      gamers=c(gamers,name2)
      name2 <- data.frame(gamers=name2,games="1",scores="100")
      table <- rbind(table,name2)
      break
    }
  }
  table
}
table <-checknames()

Я делал код, который спрашивает у пользователя 2 имени, и он должен доказать, есть ли у таблицы это имя, а если нет, добавить его, и если у него есть имя, спросить игрока, если он / она хочет изменить его.

Проблема в том, что когда игрок говорит, что хочет изменить имя, функция повтора никогда не прерывается, я думаю, что это из-за того, что я назначаю что-то неправильно (я назначаю == 2 / r == 0) и поэтому функция повторения все еще повторяется.

1 Ответ

1 голос
/ 28 апреля 2020

Я вижу пару проблем с вашим кодом. Мы сосредоточимся на 2-м repeat l oop, который вы написали для игрока 2.

Прежде всего, мы можем упростить for(if( l oop, который вы используете, чтобы проверить, если имя уже использовано. проверяя список сразу, а не просматривая весь индекс.

if(any(name2==gamers)){
        print("This player is already in the file. Would you like to change the name?")
        r=scan(,what="character",1)
      }

Теперь перейдем к некоторым проблемам. Вы сохраняете переменную r в своем сканировании, но вы проверяете наличие переменная p. Вы должны изменить строку в приведенном выше блоке кода следующим образом: p=scan(,what="character",1).

Кроме того, теперь у вас есть ситуация, когда, если ваш user2 введет имя, которое уже занято, а затем сменит его на что-то другое, ваш код будет никогда не выпускайте их, поскольку вы никогда не устанавливали p обратно на 0. Это можно исправить, добавив строку else { p=<-0 }.

Все вышеперечисленные изменения размещены здесь для вас:

if(any(name2==gamers)){
        print("This player is already in the file. Would you like to change the name?")
        p=scan(,what="character",1)
      } else {
        p <- 0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...