Прикреплённый файл «vyr4G.py»
Загрузка 1 #!/usr/bin/python
2 # coding: UTF8
3
4 '''Генератор для задачи:
5
6 Ввести арифметическое выражение c шестью приоритетами (or, and, < > ==, + -, * /, **) и круглыми скобками -- и вычислить результат'''
7
8
9 from random import *
10
11 # Скопироване без изменений из решения
12 Ops={ # знак, приоритет, свойства, функция, шаблон
13 'or': (0, '', lambda a,b: a or b , r'or' ),
14 'and': (1, '', lambda a,b: a and b, r'and'),
15 '<': (2, '', lambda a,b: a < b , r'<'),
16 '>': (2, '', lambda a,b: a > b , r'>'),
17 '==': (2, '', lambda a,b: a == b , r'=='),
18 '+': (3, '', lambda a,b: a + b , r'\+'),
19 '-': (3, '', lambda a,b: a - b , r'-'),
20 '*': (4, '', lambda a,b: a * b , r'(?<!\*)\*(?!\*)'), # из-за **
21 '/': (4, '', lambda a,b: a / b , r'/'),
22 '**': (5, 'r', lambda a,b: a ** b , r'\*\*'),
23 }
24
25 # "Тупой" вариант, генерирует странное
26 def genraw(num, level):
27 if not num: return str(randrange(100))
28 # количество опраций в левом и правом подвыражениях
29 n1=randrange(num)
30 n2=num-n1-1
31 op=choice(Ops.keys())
32 mylevel=Ops[op][0]
33 ret=genraw(n1,mylevel)+" "+op+" "+genraw(n2,mylevel)
34 if mylevel<level: return "("+ret+")"
35 else: return ret
36
37 # Вариант посложнее
38 Types=((0,1),(2,),(3,4,5))
39 def genlevel(num, level, Type):
40 # Число
41 if not num: return str(randrange(100))
42 n1=randrange(num)
43 n2=num-n1-1
44 op=choice([k for k in Ops.keys() if Ops[k][0] in Types[Type]])
45 mylevel=Ops[op][0]
46 Type1,Type2=Type,Type
47 if Type==0: # логические операции: минимум по сравнению в каждом параметре
48 # Не все операции должны быть логическими :)
49 if num<=2 or randrange(10)>7:
50 return genlevel(num,level,1)
51 if n1==0: n1,n2=n1+1,n2-1
52 elif n2==0: n1,n2=n1-1,n2+1
53 elif Type==1: # сравнение: ровно одна операция
54 Type1,Type2=2,2
55 ret=genlevel(n1,mylevel,Type1)+" "+op+" "+genlevel(n2,mylevel,Type2)
56 if mylevel<level: return "("+ret+")"
57 else: return ret
58
59 print genlevel(randrange(10,20),-1,0)
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:39, 6.8 KB) [[attachment:corrnum.py]]
- [получить | показать] (2011-09-26 11:35:39, 0.6 KB) [[attachment:corrnumC.py]]
- [получить | показать] (2011-09-26 11:35:39, 2.4 KB) [[attachment:vyr4.py]]
- [получить | показать] (2011-09-26 11:35:39, 2.4 KB) [[attachment:vyr4G.py]]
- [получить | показать] (2011-09-26 11:35:39, 1.4 KB) [[attachment:wiki.py]]
- [получить | показать] (2011-09-26 11:35:39, 2.0 KB) [[attachment:word_number3.py]]
Вам нельзя прикреплять файлы к этой странице.