コード例 #1
0
def execute():
    instruction = '''Command Arguments:
save   --- save
       --- saveAs
       --- saveAs = lrc
       --- save("lrc", "True")
       --- save(saveAs = "lrc", ALL = "True")
next   --- next
       --- next(2)
delete --- del
       --- del("告白气球")
reset  --- reset
       --- reset("告白气球")
help   --- help
'''
    response = getText(commandText)
    if response == 'help' or response == '':
        print(instruction)
        return
    global sc, st
    fd = find(response)
    try:
        if response.startswith('save'):
            if not sc:
                return
            if response == 'save':
                sc.save()
            elif response.startswith('saveAs'):
                sc.save(fd.after('saveAs = '))
            else:
                eval(response)
        elif response.startswith('next'):
            number = fd.after('next').strip()
            if number:
                number = eval(number)
            else:
                number = -1
            if st:
                st.next(number)
            elif sc:
                sc.next(number)
        elif response.startswith('del'):
            if not st:
                path = fd.between('(', ')')
                if not path:
                    path = pathText.get()
                st = lyrics.Setter(path)
            if response == 'del':
                st.delete()
            else:
                eval(response)
        elif response.startswith('reset'):
            arg = fd.between('(', ')')
            response = input('请输入想要重设的歌词~\n>>>')
            if not response:
                return
            st.reset(response, arg)
    except:
        print(instruction)
コード例 #2
0
 def calculate(self):
     '''Calculate various data.'''
     self.num = len(self.data)
     if self.num == 1 or self.data == (self.data[0], ) * self.num:
         raise Exception('Are you serious???')
     self.sorted = sorted(self.data)
     self.count = ez.find(self.sorted).count()
     self.nodup = ez.rmdup(self.data)
     self.max = self.sorted[-1]
     self.min = self.sorted[0]
     self.mean = integer(sum(self.data) / self.num)
     self.median()
     self.mode = ez.find(self.count).key(
         max(self.count[k] for k in self.count))
     if set(self.mode) == set(self.data):
         self.mode = None
     self.var = sum((data - self.mean)**2 for data in self.data) / self.num
     self.sd = self.var**0.5
     self.ad = sum(abs(data - self.mean) for data in self.data) / self.num
     self.outlier()
     self.groups = {}
コード例 #3
0
 def search(self, title, artist, Print, amount):
     '''Find and output lyrics.'''
     self.init(title, artist, Print, amount)
     try:
         self._search(title, artist, amount)
         if self.lyrics_list == []:
             print(f'QAQ主人sama搜不到{title}的歌词诶...')
             self.again = True
             for left, right in [('(', ')'), ('(', ')'), ('《', '》'), ('(', ')'), ('(', ')')]:
                 if ez.contains(title, left, right):
                     new_title = (title[:title.find(left)] + title[find(title).last(right) + 1:]).strip()
                     print(f'直接搜一下《{new_title}》看看~')
                     self._search(new_title, artist, amount)
                     if self.lyrics_list:
                         print('哇哇哇找到啦!!!~~~')
                         break
                     else:
                         print(f'QAQ抱歉,直接搜《{new_title}》也找不到诶...')
             else:
                 if artist:
                     print(f'不管作者了,直接搜一下《{title}》看看~')
                     self._search(title, '', amount)
                     if self.lyrics_list:
                         print('嘤嘤嘤找到啦!!!~~~')
                     else:
                         print(f'QAQ抱歉,只搜《{title}》也找不到诶...')
                         return ''
                 else:
                     print('网址在这里,主人sama您自己试试吧~')
                     for url in self.urls:
                         print(url)
                     return ''
         self.lyrics = self.lyrics_list[0]
         if Print:
             print(f'总共找到了{len(self.lyrics_list)}条结果, 为您呈现第1条~\n\n{self.lyrics}\n')
     except PermissionError:
         print('请先关闭音乐播放器哦~')
         self.error = PermissionError
     except KeyboardInterrupt:
         if self.error == KeyboardInterrupt:
             raise Exception('好吧好吧,看起来是真的想离开人家呢o(╥﹏╥)o')
         else:
             print('嘤嘤嘤被键盘打断了,再来一次强行终止哦')
             self.error = KeyboardInterrupt
     except Exception as e:
         print(traceback.format_exc())
         print('诶呀呀出故障了,网址在这里,主人sama您自己试试吧~')
         for url in self.urls:
             print(url)
         self.error = type(e)
     finally:
         return '' if self.error else self.lyrics
コード例 #4
0
def accurateCalculation(formula='', scin=False):
    '''Function calls not supported.
        Set scin to True to use scientific notation.
        Abbreviation: ac'''
    def get_result():
        ni = ''  ## new i
        try:
            nf = formula.replace('^', '**').lower()  ## new formula
        except AttributeError:
            raise Exception('Input formula should be a string.')
        num = ''
        try:
            for i, ch in enumerate(nf):
                if ch.isnumeric() or \
                   (ch == '-' and (i == 0 or nf[i-1] == 'e')) or \
                   (ch == ' + ' and (i == 0 or nf[i-1] == 'e')) or \
                   (ch == 'e' and (nf[i + 1].isnumeric() or nf[i + 1] in [' + ', '-'])) or \
                   (ch == '.' and nf[i + 1].isnumeric()):
                    num += ch
                elif ch == ' ':
                    pass
                else:
                    if num:
                        ni += f'Decimal("{num}")'
                        num = ''
                    ni += ch
            if num:
                ni += f'Decimal("{num}")'
        except:
            raise Exception('Invalid expression: ' + num)
        result = eval(repr(eval(ni))[9:-2])
        return result

    if formula:
        result = get_result()
        if scin:
            result = scin(result, 0)
        return result
    while True:
        formula = input(
            'Input the formula below. Empty input will exit.\n>>> ')
        if formula == '':
            return
        flag = 'scin = '
        if formula.startswith(flag):
            scin = eval(ez.find(formula).after(flag))
            continue
        result = get_result()
        if scin:
            result = scin(result, 0)
        print(result)
コード例 #5
0
def Set():
    global st
    st = lyrics.Setter(path=os.path.join(getPath(), getText(titleText)),
                       artist=getArtist())
    response = getText(commandText)
    if response in ['ow', 'overwrite']:
        st.add(source='', overwrite=True)
    else:
        for flag in ['ow = ', 'overwrite = ', 'ow=', 'overwrite=']:
            if response.startswith(flag):
                st.add(source='', overwrite=eval(find(response).after(flag)))
                break
        else:
            st.add(source='', overwrite=False)
コード例 #6
0
    def plot(self,
             interval=0,
             font=("Helvetica", 16, 'normal'),
             color="yellow",
             percent=False):
        '''Use cTurtle to plot a histogram.
            Default Font: Helvetica, 16, normal.
            Default binColor: yellow.
            Default Display: not in percentage'''
        import cTurtle
        self.group(interval)
        lower = eval(ez.find(list(self.groups.keys())[0]).between('[', ', '))
        interval = interval or eval(
            ez.find(list(self.groups.keys())[0]).between(', ', ')')) - lower
        upper = eval(ez.find(list(self.groups.keys())[-1]).between(', ', ')'))
        deltaBins = upper - lower
        xMin = lower - 0.1 * deltaBins
        xMax = upper + 0.1 * deltaBins
        yMin = -0.1
        yMax = 1.1
        ct = cTurtle.Turtle()
        ct.speed(0)
        ct.setWorldCoordinates(xMin, yMin, xMax, yMax)
        ct.hideturtle()
        ct.up()
        ct.pencolor("black")
        ct.fillcolor(color)

        maxValue = max(self.groups.values())
        while True:
            ct.goto(lower, -0.05)
            ct.write(lower, font=font)
            ct.goto(lower, 0)
            ct.down()
            value = self.groups.get(f'[{lower}, {lower + interval})', 0)
            if value:
                height = value / maxValue
                ct.begin_fill()
                ct.goto(lower, height)
                ct.goto(lower + interval, height)
                ct.goto(lower + interval, 0)
                ct.goto(lower, 0)
                ct.end_fill()
                ct.up()
                if percent:
                    value = str(round(integer(value / self.num * 100),
                                      2)) + '%'
                else:
                    value = str(value)
                ct.goto(lower + 0.5 * interval, height)
                ct.write(
                    value,
                    align='center',
                    font=(font[0],
                          int(font[1] *
                              0.75) if len(value) > 2 * interval else font[1],
                          font[2]))
                if lower + interval == upper:
                    ct.goto(upper, -0.05)
                    ct.write(upper, font=font)
                    break
            else:
                ct.goto(lower + interval, 0)
                ct.up()
            lower += interval
コード例 #7
0
 def group(self, interval=0):
     '''Group numbers with non-negative interval.
         If interval is 0, numbers will be grouped automatically.
         Otherwise it will be set to the given interval.'''
     self.groups = {}
     absmax = max(abs(i) for i in self.data)
     absmin = min(abs(i) for i in self.data)
     dmax = int(math.log(absmax, 10)) + 1
     dmin = 1
     if absmin:
         dmin = int(math.log(absmin, 10)) + 1
     dmdiff = dmax - dmin
     if interval == 0:
         diff = absmax - absmin
         ddiff = int(math.log(diff, 10)) + 1
         if dmdiff == 0:
             ## 不够好
             interval = 10**ddiff
             if ddiff < dmax:
                 self.groups = self.count
                 return self.groups
             if ddiff == dmax:
                 interval //= 10
         elif dmdiff == 1:
             interval = 10**dmin
         elif dmdiff == 2:
             interval = 10**dmin
             if ddiff == dmax:
                 interval *= 10
         elif dmdiff >= 3:
             ## 也许可以优化
             interval = 10
     if dmdiff < 3:
         mini = self.min // interval * interval
         maxi = (self.max // interval + 1) * interval
         while mini != maxi:
             for k in self.count:
                 upper = mini + interval
                 if mini <= k < upper:
                     key = f'[{mini}, {upper})'
                     self.groups[key] = self.groups.get(key,
                                                        0) + self.count[k]
             mini += interval
     else:
         nmin = nmax = 0
         try:
             ## n 表示 negative
             nmin = integer(-10**int(
                 math.log(-min(k for k in self.count if k < 0), 10) + 1))
             nmax = integer(-10**int(
                 math.log(-max(k for k in self.count if k < 0), 10) + 1))
         except ValueError:
             pass
         ## p 表示 positive
         pmin = 10**(dmin - 1)
         pmax = 10**dmax
         while nmin < nmax or pmin < pmax:
             for k in self.count:
                 nupper = nmin // interval
                 pupper = pmin * interval
                 key = ''
                 if nmin <= k < nupper:
                     key = f'[{nmin}, {nupper})'
                 elif -1 <= k < 1:
                     key = '[-1, 1)'
                     if not nmax:
                         key = '[0, 1)'
                     elif not pmax:
                         key = '[-1, 0)'
                 elif pmin <= k < pupper:
                     key = f'[{pmin}, {pupper})'
                 if key:
                     self.groups[key] = self.groups.get(key,
                                                        0) + self.count[k]
             nmin //= interval
             pmin *= interval
         self.groups = {
             k: self.groups[k]
             for k in sorted(
                 self.groups,
                 key=lambda x: eval(ez.find(x).between('[', ', ')))
         }
     return self.groups