code: def _pos_nt(pr, pos, stranded=False):
      
      nt = None
      bases = dict(zip(pr.alignment.get_reference_positions(), 
                       list(pr.alignment.seq.upper())))
      if pos in bases.keys():
          nt = bases[pos]
      if nt and stranded:
          strand = None
          if pr.alignment.is_read1 and pr.alignment.is_reverse:
              strand = '+'
          if pr.alignment.is_read2 and not pr.alignment.is_reverse:
              strand = '+'
          if pr.alignment.is_read1 and not pr.alignment.is_reverse:
              nt = str(Seq(nt).reverse_complement())
              strand = '-'
          if pr.alignment.is_read2 and pr.alignment.is_reverse:
              nt = str(Seq(nt).reverse_complement())
              strand = '-'
          nt = '{}{}'.format(nt, strand)
      return nt
docs: Given a pileup read and a position, return the base that is covered by the
      read at the given position if the position is covered.
  
      Parameters
      ----------
      pr : pysam.calignmentfile.PileupRead
          Region of type chrom:start-end, chrom:start-end:strand, or [chrom,
      
      pos : int
          Zero-based position of the nucleotide of interest in genomic
          coordinates.
  
      stranded : boolean
          Boolean indicating whether data is stranded and stranded nucleotide
          should be returned. Assumes R1 read on reverse strand implies + strand
          coverage etc.
  
      Returns
      -------
      nt : str or None
          If None, then the read did not cover the position. If not None, returns
          the nucleotide at that position (with + or - appended to indicate strand
          if desired).