#matlab
#matlab
Вопрос:
Ввод числа, например
StudentNo = input('Please input your student number: ')
так что
StudentNo = 54456842
Вводим это, а затем превращаем в отдельные числа
StudentNo = [5,4,4,5,6,8,4,2]
чтобы найти среднее значение или другую статистику по цифрам, не получая NaN?
Комментарии:
1. Будет ли номер студента всегда состоять из одной цифры или он будет меняться?
Ответ №1:
Вы можете разбить его на цифры с помощью следующего подхода
str2num(num2str(StudentNo).')
Сначала это преобразуется StudentNo
в строку, затем выполняется транспонирование таким образом, чтобы каждый символ находился в отдельной строке, а затем мы вызываем str2num
преобразование каждой строки в отдельное число.
Другим вариантом было бы преобразовать в строку, а затем вычесть значение ASCII '0'
для преобразования каждого символа в числовую цифру
num2str(StudentNo) - '0'
Ответ №2:
Подход Суэвера — отличный способ сделать это. Однако, если вам не нужно фактическое число в виде числа, и вам нужны только отдельные цифры, тогда вы можете напрямую указать, что вам нужны числа в виде строки в input
-call .
StudentNo = input('Please input student number: ', 's')
Здесь 's'
указывает, что входные данные являются строкой. Таким образом, вы можете вводить StudentNo
без апостроф.
StudentNo = input('Please input student number: ', 's')
Please input student number: 54456842
StudentNo =
54456842
Теперь вы можете использовать любой из двух подходов в ответе Суэвера, чтобы преобразовать это в отдельные числа. Другой вариант — просто выполнить вычитание '0'
в самом вызове:
StudentNo = input('Please input student number: ', 's')-'0'
Please input student number: 54456842
StudentNo =
5 4 4 5 6 8 4 2
Поскольку это немного сложно для чтения, вы также можете использовать это как анонимную функцию:
stid = @() input('Please input student number: ', 's')-'0';
И назовите это так:
stid()
Please input student number: 123456
ans =
1 2 3 4 5 6
Ответ №3:
Ввод фиксирует одно число. Было бы трудно узнать, сколько цифр в каждом из номеров учащихся, поэтому я бы предложил получать их по одному:
StudentNo = input('Please input your student number one by one (end with -1): ');
while StudentNo(end)~= -1
StudentNo = [StudentNo, input('Please input the next student number (end with -1): ')];
end
% remove the -1
StudentNo = StudentNo(1:end-1);
Редактировать
На основе @StewieGriffin: комментарий если у вас многозначный номер студента, вы могли бы просто сделать это:
StudentNo = input('Please input the next student number: ')];
[1 2 12 13]
Это определит каждое число как отдельную запись в векторе ваших номеров учащихся.
Комментарии:
1. Подход Suever довольно хорошо обрабатывает переменное количество цифр, поэтому я не думаю, что это большая проблема. Однако, если вы действительно хотите вводить одно за другим, вероятно, было бы проще просто ввести их все внутри скобок:
[1 2 3 4]
, таким образом избегая цикла while .2. Проблема заключается в многозначных числах учащихся, например:
[1 2 12 45]
которые будут преобразованы в[1 2 1 2 4 5]
. Я не знал, чтоinput
это действительно может[]
быть правильно обнаружено.