Надежное совпадение пользовательского ввода в цикле while - PullRequest
0 голосов
/ 30 апреля 2020
while(not_match){
    if(r==1){
      print("Name Player 1: ")
      name1=scan(,what="character",1)
}
}

Привет всем, я хочу, чтобы, когда пользователь вводит «enter», когда код запрашивает имя игрока 1, код говорит что-то вроде: «Это имя недопустимо», и повторите запрос имени Игрок 1. Я знаю, что мне нужно использовать что-то вроде: if (length (name1 == 0)) ... Но я не знаю, как заставить код повторять, спрашивая name1. Надеюсь, ты сможешь мне помочь. Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2020

Этот подход должен работать для вас

name = readline("Player name: >")
while (!stringr::str_detect("[a-z]", tolower(name)) | name == ""){
  name = readline("Player name: >")
}

Это может быть излишним, но если вы заранее знаете имена игроков, вы можете использовать пакет choices. Прямо сейчас доступно только на GitHub и устанавливается через

devtools::install_github("matiasandina/choices")
library(choices)
players <- c("Alice", "Bob", "Chris")
numeric_menu(players, "Select Player")

. Вы увидите меню и сможете выбирать, используя цифры.

+++++++++++++++++++++++++++++++
Please see your options below:
+++++++++++++++++++++++++++++++
Option 1) Alice
Option 2) Bob
Option 3) Chris

Select Player :> 

Внутренняя функция позаботится о соответствии чисел сохраненным параметрам проигрывателя. Кроме того, можно нажимать клавишу «Ввод» или «хлопать кошкой» по клавиатуре

Name Player :> sdkjaksdjaksd
Your input is not valid, please enter a number.
Name Player :> kasdjlaksjdlkasasdma
Your input is not valid, please enter a number.
Name Player :> 
Your input is not valid, please enter a number.
Name Player :> ?
Your input is not valid, please enter a number.
Name Player :> 54
Option is not valid. Choose again
Name Player :> 

Отказ от ответственности: я являюсь автором пакета выбора, дополнительная информация здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...