Maison développement back-end Tutoriel Python python正则表达式之作业计算器

python正则表达式之作业计算器

Jun 10, 2016 pm 03:05 PM
python正则表达式

作业:计算器开发

实现加减乘除及拓号优先级解析
用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致
一、说明:

有一点bug就是不能计算幂次方,如:'6**6'会报错

该计算器思路:
1、没用使用递归,先找出并计算所有括号里的公式,再计算乘除和加减
2、所有的数字都认为是浮点型操作,以此来保留小数
使用技术:
1、正则表达式
2、tkinter

二、流程图:

 

 三、代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

#!/usr/bin/env python3

#antuor:Alan

  

import re

from functools import reduce

from tkinter import *

  

  

  

'''处理特殊-号运算'''

def minus_operation(expresstion):

  minus_operators = re.split("-",expresstion)

  calc_list = re.findall("[0-9]",expresstion)

  if minus_operators[0] =="":

    calc_list[0] = '-%s' % calc_list[0]

  res = reduce(lambda x,y:float(x)-float(y),calc_list)

  print(">>>>>>>>>>>>>>减号[%s]运算结果:" % expresstion,res)

  return res

  

'''reduce()对sequence连续使用function, 如果不给出initial, 则第一次调用传递sequence的两个元素,

以后把前一次调用的结果和sequence的下一个元素传递给function'''

  

  

  

  

'''处理双运算符号'''

def del_duplicates(expresstion):

  expresstion = expresstion.replace("++","+")

  expresstion = expresstion.replace("--","-")

  expresstion = expresstion.replace("+-","-")

  expresstion = expresstion.replace("--","+")

  expresstion = expresstion.replace('- -',"+")

  e

  return expresstion

  

'''*/运算函数'''

def mutiply_dividend(expresstion):

  calc_list = re.split("[*/]",expresstion)     #用* or /分割公式

  operators = re.findall("[*/]",expresstion)    #找出所有*和/号

  res = None

  for index,i in enumerate(calc_list):

    if res:

      if operators[index-1] =='*':

        res *= float(i)

      elif operators[index-1] =='/':

        res /=float(i)

    else :

      res = float(i)

  procession0 = "[%s]运算结果=" % expresstion,res

  final_result.insert(END,procession0)    #插入窗体

  print(procession0)

  return res

  

  

  

'''处理运算符号顺序混乱情况'''

def special_features(plus_and_minus_operators,multiply_and_dividend):

  

  for index,i in enumerate(multiply_and_dividend):

    i = i.strip()

    if i.endswith("*") or i.endswith("/"):

      multiply_and_dividend[index] = multiply_and_dividend[index] + plus_and_minus_operators[index] + multiply_and_dividend[index+1]

      del multiply_and_dividend[index+1]

      del plus_and_minus_operators[index]

  return plus_and_minus_operators,multiply_and_dividend

  

  

  

def minus_special(operator_list,calc_list):

  for index,i in enumerate(calc_list):

    if i =='':

      calc_list[index+1] = i + calc_list[index+1].strip()

  

  

  

'''运算除了()的公式+-*/'''

def figure_up(expresstion):

  expresstion = expresstion.strip("()")    #去掉外面括号

  expresstion = del_duplicates(expresstion)  #去掉重复+-号

  plus_and_minus_operators = re.findall("[+-]",expresstion)

  multiply_and_dividend = re.split("[+-]",expresstion)

  if len(multiply_and_dividend[0].strip()) ==0:

    multiply_and_dividend[1] = plus_and_minus_operators[0] + multiply_and_dividend[1]

    del multiply_and_dividend[0]

    del plus_and_minus_operators[0]

  

  plus_and_minus_operators,multiply_and_dividend = special_features(plus_and_minus_operators,multiply_and_dividend)

  for index,i in enumerate(multiply_and_dividend):

    if re.search("[*/]",i):

      sub_res = mutiply_dividend(i)

      multiply_and_dividend[index] = sub_res

  

  print(multiply_and_dividend,plus_and_minus_operators)  #计算

  final_res = None

  for index,item in enumerate(multiply_and_dividend):

    if final_res:

      if plus_and_minus_operators[index-1] == '+':

        final_res += float(item)

      elif plus_and_minus_operators[index-1] == '-':

        final_res -= float(item)

    else:

      final_res = float(item)

  procession = '[%s]计算结果:' % expresstion,final_res

  final_result.insert(END,procession)    #插入窗体

  print(procession)

  return final_res

  

"""主函数:运算逻辑:先计算拓号里的值,算出来后再算乘除,再算加减"""

def calculate():

  expresstion = expresstions.get()         #获取输入框值

  flage = True

  calculate_res = None               #初始化计算结果为None

  while flage:

    m = re.search("\([^()]*\)",expresstion)    #先找最里层的()

    # pattern = re.compile(r"\([^()]*\)")

    # m = pattern.match(expresstion)

    if m:

      sub_res = figure_up(m.group())      #运算()里的公式

      expresstion = expresstion.replace(m.group(),str(sub_res))  #运算完毕把结果替换掉公式

    else:

      print('---------------括号已经计算完毕--------------')

      procession1 = "最终计算结果:",figure_up(expresstion)

      final_result.insert(END,procession1)   #插入窗体

      print('\033[31m最终计算结果:',figure_up(expresstion))

  

      flage = False

  

  

if __name__=="__main__":

  # res = calculate("1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )")

  window = Tk()         ###创建窗体

  window.title('计算器')    ###命名窗体

  frame1 = Frame(window)    ###框架1

  frame1.pack()        ###放置

  frame2 = Frame(window)    ###框架2

  frame2.pack()        ###放置

  lable = Label(frame1,text = "请输入公式:")  ###文字标签

  lable.pack()

  expresstions = StringVar()  ###输入框属性,字符串

  entryname = Entry(frame1,textvariable = expresstions) ###文本输入框

  bt_get_expresstions = Button(frame1,text = "提交",command = calculate) ###按钮挂件

  bt_get_expresstions.pack()

  entryname.pack()

  lable.grid(row =1,column =1)  ###位置

  entryname.grid(row=1,column =2)

  bt_get_expresstions.grid(row =1,column =3)

  final_result = Text(frame2)  ###计算结果显示框

  final_result.tag_config("here", background="yellow", foreground="blue")

  final_result.pack()

  window.mainloop()       ###事件循环

Copier après la connexion

以上就是本文的全部内容,希望对大家的学习有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les expressions régulières Python pour le traitement de fichiers Word Comment utiliser les expressions régulières Python pour le traitement de fichiers Word Jun 22, 2023 am 09:57 AM

L'expression régulière Python est un outil de correspondance puissant qui peut nous aider à identifier et à remplacer rapidement le texte, les styles et les formats dans le traitement des fichiers Word. Cet article explique comment utiliser les expressions régulières Python pour le traitement de fichiers Word. 1. Installez la bibliothèque Python-docx Python-docx est une bibliothèque fonctionnelle permettant de traiter des documents Word en Python. Vous pouvez l'utiliser pour lire, modifier, créer et enregistrer rapidement des documents Word. Avant d'utiliser Python-docx, vous devez vous assurer

Comment utiliser les expressions régulières Python pour traiter des nombres et des montants Comment utiliser les expressions régulières Python pour traiter des nombres et des montants Jun 23, 2023 am 08:21 AM

Les expressions régulières Python sont un outil puissant qui nous aide à effectuer une correspondance et une recherche précises et efficaces dans les données texte. Les expressions régulières sont également extrêmement utiles dans le traitement des nombres et des montants, et peuvent trouver et extraire avec précision les informations sur le nombre et le montant. Cet article expliquera comment utiliser les expressions régulières Python pour traiter des nombres et des montants, aidant ainsi les lecteurs à mieux faire face aux tâches réelles de traitement des données. 1. Traiter les nombres 1. Faire correspondre les nombres entiers et les nombres à virgule flottante Dans les expressions régulières, pour faire correspondre les nombres entiers et les nombres à virgule flottante, vous pouvez utiliser d+ pour la correspondance.

Comment utiliser les expressions régulières Python pour l'orchestration de conteneurs Comment utiliser les expressions régulières Python pour l'orchestration de conteneurs Jun 22, 2023 am 09:16 AM

Dans l'orchestration de conteneurs, nous devons souvent filtrer, faire correspondre et remplacer certaines informations. Python fournit des expressions régulières, un outil puissant qui peut nous aider à réaliser ces opérations. Cet article explique comment utiliser les expressions régulières Python pour l'orchestration de conteneurs, y compris des connaissances de base sur les expressions régulières, comment utiliser le module Pythonre et certaines applications d'expressions régulières courantes. 1. Connaissance de base des expressions régulières L'expression régulière (RegularExpression) fait référence à un modèle de texte, utilisé

Comment utiliser les expressions régulières Python pour la segmentation des mots Comment utiliser les expressions régulières Python pour la segmentation des mots Jun 23, 2023 am 10:37 AM

Les expressions régulières Python sont un outil puissant pour traiter les données textuelles. Dans le traitement du langage naturel, la segmentation des mots est une tâche importante qui sépare un texte en mots individuels. En Python, nous pouvons utiliser des expressions régulières pour effectuer la tâche de segmentation des mots. Ce qui suit utilisera Python3 comme exemple pour présenter comment utiliser les expressions régulières pour la segmentation de mots. Importer le module re Le module re est le module d'expression régulière intégré à Python. Vous devez d'abord importer le module. importer le texte de définition

Comment utiliser les expressions régulières Python pour l'extraction de contenu Comment utiliser les expressions régulières Python pour l'extraction de contenu Jun 22, 2023 pm 03:04 PM

Python est un langage de programmation de haut niveau largement utilisé avec un riche ensemble de bibliothèques et d'outils qui rendent l'extraction de contenu plus facile et plus efficace. Parmi elles, les expressions régulières sont un outil très important, et Python fournit le module re pour utiliser des expressions régulières pour l'extraction de contenu. Cet article vous présentera les étapes spécifiques d'utilisation des expressions régulières Python pour l'extraction de contenu. 1. Comprendre la syntaxe de base des expressions régulières Avant d'utiliser les expressions régulières Python pour l'extraction de contenu, vous devez d'abord comprendre la syntaxe de base des expressions régulières.

Comment utiliser les expressions régulières Python pour les structures de données et les algorithmes Comment utiliser les expressions régulières Python pour les structures de données et les algorithmes Jun 22, 2023 pm 08:01 PM

L'expression régulière Python est un outil de traitement de chaînes basé sur la correspondance de modèles, qui peut nous aider à extraire rapidement et efficacement les informations requises du texte. Dans les structures de données et les algorithmes, les expressions régulières peuvent être utilisées pour implémenter la correspondance de texte, le remplacement, la segmentation et d'autres fonctions, offrant ainsi un support plus puissant à notre programmation. Cet article explique comment utiliser les expressions régulières Python pour les structures de données et les algorithmes. 1. Connaissances de base des expressions régulières Avant de commencer, comprenons d'abord quelques connaissances de base des expressions régulières : Jeu de caractères : représenté par des crochets,

Comment utiliser les expressions régulières Python pour la refactorisation du code Comment utiliser les expressions régulières Python pour la refactorisation du code Jun 23, 2023 am 09:44 AM

Dans le codage quotidien, nous devons souvent modifier et reconstruire le code pour augmenter la lisibilité et la maintenabilité du code. Les expressions régulières sont l’un des outils importants. Cet article présentera quelques techniques courantes sur la façon d'utiliser les expressions régulières Python pour la refactorisation du code. 1. Rechercher et remplacer L'une des fonctions les plus couramment utilisées des expressions régulières est la recherche et le remplacement. Supposons que nous devions remplacer toutes les instructions d'impression du code par des instructions de journalisation. Nous pouvons utiliser l’expression régulière suivante pour rechercher : prints*((.

Comment utiliser les expressions régulières Python pour l'esthétique du code et l'expérience utilisateur Comment utiliser les expressions régulières Python pour l'esthétique du code et l'expérience utilisateur Jun 22, 2023 am 08:45 AM

Dans le développement de logiciels, l’esthétique du code et l’expérience utilisateur sont souvent ignorées, ce qui entraîne de nombreux problèmes logiciels lors de leur utilisation réelle. Python, en tant que langage de programmation puissant, fournit des expressions régulières comme un outil puissant pour nous aider à résoudre ces problèmes. Cet article explique comment utiliser les expressions régulières Python pour l'esthétique du code et l'expérience utilisateur. 1. Introduction aux expressions régulières Python Les expressions régulières sont un langage qui décrit des modèles de texte et peut être utilisé pour faire correspondre, rechercher, remplacer et diviser du texte. Le module re de Python fournit

See all articles