Да, это - таблица отображения хеша или хэш-таблица. Можно прочитать описание dict реализации Python, как записано Tim Peters, здесь .
Вот почему Вы не можете использовать что-то 'не hashable' как dict ключ, как список:
>>> a = {}
>>> b = ['some', 'list']
>>> hash(b)
Traceback (most recent call last):
File "", line 1, in
TypeError: list objects are unhashable
>>> a[b] = 'some'
Traceback (most recent call last):
File "", line 1, in
TypeError: list objects are unhashable
Вы можете читать больше о проверке хэш-таблиц или , как она была реализована в python и , почему она реализована тот путь .
Команда set поддерживает некоторые ограниченные вычисления. В вашем случае вы хотите:
set / a result = (100 * x) / y
Запустите set /?
, чтобы увидеть полную документацию о том, что поддерживается. Переключатель / a
выполняет автоматическую подстановку переменных, поэтому вы можете использовать x
вместо % x%
.
НЕ выполняйте вычисления в пакетном режиме. Если вы используете процентное значение, у вас могут быть десятичные дроби, а пакет не поддерживает десятичные дроби. (Плавающий). Используйте vbscript или что-то лучше.
сохраните ниже как caculate.vbs
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
x = objArgs(0)
y = objArgs(1)
WScript.Echo ( x + 1 ) * 100 / y
и в командной строке
c:\test> cscript //nologo calculate.vbs 4 5
@echo off
set x=42
set y=5
set /a z = 100 * x / y
echo %z%
Команда set / a
позволяет присвоить результат математического выражения переменной (при этом %
имена переменных в этих выражениях не требуются). См. set /?
для получения списка поддерживаемых операторов и подробностей.
Обратите внимание, что командные файлы Windows не поддерживают арифметику с плавающей запятой, поэтому, если результатом выражения является дробное число, только целая часть будут засчитаны. Например, 3/2 оценивается как 1 и 2/3 как 0 .